【发布时间】:2021-01-30 00:20:49
【问题描述】:
为什么空接口不需要对象为空?
interface A {};
const a: A = {a: 1};
console.log(a);
是有效代码,将输出{ a: 1 }。
我认为添加可选属性应该可以正常工作,但是
interface A {};
interface B extends A {
b?: any;
}
const a: B = {a: 1};
console.log(a);
以错误Type '{ a: number; }' is not assignable to type 'B'结束。
- 如果接口定义了对象必须具有的属性,B case 应该可以正常工作,所有必需的属性都存在。
- 如果接口定义了对象可以具有的属性,则应导致错误,
a未在接口中定义。
非空接口定义了对象可以和必须拥有的内容。
空界面的行为类似于any。
有没有解释为什么空接口会这样?这是故意的还是只是一个错误?
【问题讨论】:
-
空接口不定义任何约束,适用于任何对象。不过我不确定它的实用性。
标签: typescript