为什么typescript在直接分配对象时会抛出错误,而在通过第三个变量分配对象时不会抛出错误



我有以下代码:

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属性,这意味着没有类型化的方法来访问此属性,很可能是一个错误。

最新更新