为什么空接口不要求对象为空?空接口允许任何对象?
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的情况下应该可以正常工作,所有必需的属性都存在。
- 如果接口定义了对象可以具有的属性,则应导致错误,
a
未在接口中定义。
非空接口定义了对象可以和必须拥有的对象。 空接口的行为类似于any
。
是否有解释为什么空界面如此表现?这是故意的还是只是一个错误?
空接口没有定义任何约束并适用于任何对象。虽然我不确定它的效用。 – rageit