我想我在某处看到过一些关于此的内容,但我再也找不到了。
我想了解为什么 TypeScript 类型在对象文字和变量之间应用/执行方式不同。
interface User {
id: number;
}
function p(u: User) { }
const u1 = { id: 123 }
const u2 = { id: 124, foo: 'bar' };
p(u1); // << Works as expected
p({ id: 124, foo: 'bar' }); // << ERROR as expected: ' Object literal may only specify known properties'
p(u2); // << NO ERROR??
// workaround
const u3: User = { id: 124, foo: 'bar' }; // << ERROR as expected
解决方法是好的,但是不对称可能会导致意外的行为,开发人员会进行严格的部分检查以意识到允许其他属性。
我确信这是有原因的,我很想知道解释。
最佳答案
Here's a part from the handbook which talks about this.总结一下我能做的最好的总结:检查对象文字是否有多余的属性(而不是“传递”对象)的原因是因为多余的属性通常是在处理诸如options 对象,这是一种非常常见的模式。
我不确定我自己是否完全同意这个推理,但事实就是这样的 ́\_(ツ)_/́
关于typescript - 为什么在对象字面量和变量上键入的强制方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51996328/