打字稿:对象分配未按预期工作

时间:2020-07-30 12:22:55

标签: typescript types

type A = {
    name: string
}
const a = { name: '', x: 12 }
const aa: A = a //no error

但是:

type A = {
    name: string
}
const aa: A = { name: '', x: 12 } // error ts2322

这两个代码段在js中的含义完全相同,为什么第一个代码段是有效的ts代码,而第二个代码段则无效?

它看起来很像ts错误,但在搜索互联网后我没有任何提示

2 个答案:

答案 0 :(得分:0)

好的,ts对文字和变量的处理有所不同,而与js并没有什么不同

答案 1 :(得分:0)

在以下任务中:

const a = { name: '', x: 12 }

a的类型应从其分配的值(即等同于{ name: string; x: number; })推论得出。

对于后续任务:

const aa: A = a

我相信TypeScript编译器会接受这种情况,因为结构上推断的类型满足A类型(即,尽管有多余的A,但它具有x: number类型所需的所有属性。 )。

我怀疑编译器对第二个片段不太宽容,因为您无法使用不属于类型A的属性进行初始化。