有趣的行为:对象文字只能指定已知属性

这里有类似的问题,我可以理解此错误的性质:

type Person = { name: string };

// Error: Object literal may only specify known properties, and 'age' does not exist in type 'Person'.
const person: Person = { name: 'Sarah', age: 13 };

So this fails, because property age is not a part of type Person which makes sense.

但是,我可以做到这一点而没有任何问题:

type Person = { name: string };

const obj = { name: 'Sarah', age: 13 };
const person: Person = obj;

console.log(person); // { name: 'Sarah', age: 13 }

为什么第一个失败,第二个失败-这两个示例都不都失败还是都通过?

对于我来说,这两个代码段是相同的。不是吗

评论
zipsum
zipsum

从TypeScript 1.6开始,对象文字中的属性在为其分配的类型中没有对应的属性被标记为错误。

基本上:TS编译器知道永远不会使用年龄,这就是为什么它会生您的气。在第二个示例中,它不知道年龄将永远不会用作正常对象的一部分。一旦将其复制到人员,则名称将继续存在

TLDR:使用文字初始化时,TSC严格

点赞
评论