【发布时间】:2020-05-09 15:01:16
【问题描述】:
这里有类似的问题,我可以理解这个错误的性质:
type Person = { name: string };
// Error: Object literal may only specify known properties, and 'age' does not exist in type 'Person'.
const person: Person = { name: 'Sarah', age: 13 };
所以这失败了,因为属性 age 不是 Person 类型的一部分,这是有道理的。
但是,我可以毫无问题地做到这一点:
type Person = { name: string };
const obj = { name: 'Sarah', age: 13 };
const person: Person = obj;
console.log(person); // { name: 'Sarah', age: 13 }
为什么第一个失败而第二个没有 - 这两个示例不应该都失败还是都通过?
就我而言,这两个代码 sn-ps 是相同的。不是吗?
更新:
下面是Typescript Handbook 对此行为的解释:
对象字面量得到特殊处理并具有多余的属性 检查何时将它们分配给其他变量,或将它们作为 论据。如果一个对象字面量具有任何“目标 type”没有,会报错。
【问题讨论】:
-
这太曲折了
标签: typescript