首页 > 解决方案 > 为什么这个 TypeScript 代码无法进行类型检查?

问题描述

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

https://www.typescriptlang.org/play/index.html#src=let%20a%3A%20%7B%20b%3A%20number%20%7D%0D%0Alet%20b%3A%20%7B% 20b%3A%20number%2C%20c%3A%20number%20%7D%20%3D%20%7B%20b%3A%201%2C%20c%3A%202%20%7D%0D%0Aa%20% 3D%20%7B%20b%3A%201%2C%20c%3A%202%20%7D%20%2F%2F%20Error%3A%20Object%20literal%20may%20only%20specify%20known%20properties%0D% 0Aa%20%3D%20b%20%2F%2F%20Ok%0D%0A

标签: typescript

解决方案


Typescript 支持结构类型。在检查对象类型 B 是否是对象类型 A 的子类型时,B 的多余属性无关紧要。为了捕获更多错误,Typescript 有一个特殊情况,它知道类型 B 来自对象字面量。这些被称为新鲜对象文字,并在此处进行了描述。理由是多余的财产通常是一个错字。但是当类型 B 可以来自任何对象,而不仅仅是对象字面量时,通常的结构类型规则适用,因此没有警告。


推荐阅读