let a: { b: number }
let b: { b: number, c: number } = { b: 1, c: 2 }
a = { b: 1, c: 2 } // Error: Object literal may only specify known properties
a = b // OK
答案 0 :(得分:2)
Typescript支持结构化键入。在检查对象类型B是否为对象类型A的子类型时,B的多余属性无关紧要。为了捕获更多错误,Typescript在知道类型B来自对象文字的情况下有一种特殊情况。这些称为新鲜对象文字,并在here中进行了描述。理由是多余的财产通常是错字。但是,当类型B可以来自任何对象而不仅仅是对象文字时,通常的结构性输入规则都适用,因此没有警告。
答案 1 :(得分:1)
错误消息说明了一切。
第一种情况失败是因为“ [o] bject文字只能指定已知属性” ,并且c
不是a
的已知属性
第二种情况成功,因为b
不是对象文字,因此上述规则不适用。