typescript - 为什么在对象字面量和变量上键入的强制方式不同?

标签 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

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

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

最佳答案

Here's a part from the handbook which talks about this.总结一下我能做的最好的总结:检查对象文字是否有多余的属性(而不是“传递”对象)的原因是因为多余的属性通常是在处理诸如options 对象,这是一种非常常见的模式。

我不确定我自己是否完全同意这个推理,但事实就是这样的 ́\_(ツ)_/́

关于typescript - 为什么在对象字面量和变量上键入的强制方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51996328/

相关文章:

javascript - 我的位置返还得太快了,如何做出 promise

javascript - 将 @types 中的类型分配给本地代码?

angular - 如何从 typescript 访问垫菜单触发器

java - 从java转换后如何修复 typescript 类文件错误?

angular - 如何使用 Subjects 在 Angular 6 中共享全局数据

typescript - 在 Typescript 的 NodeList 上使用扩展运算符

javascript - 返回每个选定的候选人共享的标签列表(例如,选定的内容为 true)

javascript - Typescript 如何从循环中调用和访问字典键

angular - 如何使用 typescript 在 angular2 应用程序中实现 AAD B2C 功能?

typescript - WebStorm,ES5/ES3 中的异步函数或方法需要 'Promise' 构造函数