为什么在对象文字和变量上键入的强制执行方式有所不同?

时间:2018-08-24 01:34:07

标签: typescript

我想我对此有所了解,但现在找不到了。

我想了解为什么在对象文字和变量之间不同地应用/强制执行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

解决方法是可以的,但是不对称会导致意外的行为,在这种情况下,开发人员将进行严格的部分检查以意识到允许其他属性。

我确定是有原因的,我很想知道这个解释。

1 个答案:

答案 0 :(得分:4)

Here's a part from the handbook which talks about this.总而言之,我能做到的最好:检查对象文字是否具有多余的属性(而不是“传递”对象)的原因是因为多余的属性通常是拼写错误或其他类型的结果像选项对象这样的错误模式,这是很常见的模式。

我不确定自己是否完全同意这种推理,但这就是¯\ _(ツ)_ /¯