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

Typescript报错2345不同场景表现不一致问题咨询

TypeScript类型校验规则说明

这个问题是TypeScript两个核心类型规则共同作用的结果:结构类型校验(鸭子类型) 和 对象字面量额外属性校验。

TEST1 合法原因

Empty是没有定义任何属性的空接口,在结构类型校验规则下,任意对象都满足「无必须属性」的要求,哪怕携带额外属性也完全符合类型约束,因此传入带有a、b属性的对象字面量不会报错。

TEST2 报错原因

你收到的报错触发了TypeScript针对直接作为参数传递的对象字面量的特殊校验规则:

类型'{ a: number; b: number; }'的参数不能赋值给类型'Single'的参数。对象字面量仅可指定已知属性,而'b'不存在于类型'Single'中。(2345)
该规则是TypeScript为了避免开发者手误多写、写错属性名新增的严格校验:当你直接把对象字面量作为参数传入函数时,除了要满足目标类型的必填属性要求外,不允许携带目标类型未定义的额外属性。你传入的字面量多了Single接口没有声明的b属性,因此触发报错。


TEST3 合法原因

obj是预先声明的变量,TypeScript会自动推导它的类型为{a: number, b: number}。当你把这个变量传给printSingle时,不会触发对象字面量的额外属性校验,只会走普通的结构类型校验:只要变量包含目标类型要求的所有属性(本示例中obj存在符合要求的a: number属性),就会被判定为类型合法,额外的b属性不会影响校验结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:15:04