interface Animal {
name: string;
}
let animal: Animal = {
name: 'Tom',
run: () => { console.log('run') }
};
// 不能将类型“{ name: string; run: () => void; }”分配给类型“Animal”。
// 对象文字可以只指定已知属性,并且“run”不在类型“Animal”中。
上面的这段是会报错的,下面的就不会,想问下区别在哪里呢?
interface Animal {
name: string;
}
let tom = {
name: 'Tom',
run: () => { console.log('run') }
};
let animal: Animal = tom
唔,所谓的“对象文字”在中文中其实一般翻译成“字面量”。
题目中的错误是 TS 的 “多余属性检查” 特性,是 TS 3.5 后新引入的。
目的是为了防止某些因拼写错误导致的问题,比如下面这种:
这个特性仅在字面量声明对象中存在;下面的例子不是字面量,所以只检查是否符合鸭子类型就通过了。