You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何直接给带类型注解的变量赋值对象字面量会报错?

为什么两段TypeScript代码执行结果不同?

这是TypeScript的**多余属性检查(Excess Property Checks)**机制在起作用,具体原因如下:

  • 直接赋值对象字面量时,TypeScript会对这个"新鲜"的字面量做额外校验:它会严格检查字面量的属性是否完全匹配目标类型MyType的定义,一旦发现目标类型中不存在的属性(比如这里的age),就会抛出错误。这个机制是为了帮你避免拼写错误或者不小心添加了不需要的属性。

  • 先赋值给中间变量再传递时,情况不一样:当你把对象字面量赋值给没有显式类型注解的mytype时,TypeScript会自动推断mytype的类型为{ name: string; age: number }。之后把mytype赋值给MyType类型的变量my时,TypeScript用的是结构类型兼容性规则——只要mytype包含MyType要求的所有属性,就允许赋值,不会再检查多余属性。因为{ name: string; age: number }是MyType的子类型,自然可以兼容。

简单说就是:直接用对象字面量赋值时,TS会多一层"严格校验";通过中间变量转手时,就只看结构是否兼容,不管多余属性。

内容的提问来源于stack exchange,提问作者nearworld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 05:45:33