我有以下代码:
interface User {
id: number;
name: string;
}
const newUser = {id: 5, name: "Tom", age: 22}
// throws no error
const user1: User = newUser
// throws:
// Type '{ id: number; name: string; age: number; }' is not assignable to type 'User'.
// Object literal may only specify known properties, and 'age' does not exist in type 'User'.
const user2: User = {id: 5, name: "Tom", age: 22}
TS游乐场
为什么第一个作业可以,第二个作业不可以,尽管他们做的事情几乎相同?
错误来自对文本对象(docs(的过度属性检查。不过,文档中对其背后的推理有点稀疏,实际上并没有那么复杂。
在第一个例子中,除了分配给user1
之外,newUser
可能会出现在代码的其他部分,因此即使我们不会在user1
上访问age
,它仍然可能在其他地方被访问。
对于第二个例子,情况并非如此。无法在user2
上访问age
属性,这意味着没有类型化的方法来访问此属性,很可能是一个错误。