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

TypeScript泛型返回值推断接受带未知属性对象的问题

问题原因说明

你遇到的这个表现是TypeScript的有意设计,并非Bug,核心和两个特性相关:

1. TypeScript采用结构类型系统(鸭子类型)

只要一个对象包含目标类型定义的所有必需属性,无论是否携带额外属性,都属于目标类型的合法子类型,可以赋值给目标类型的变量。
你的代码中processor返回的对象包含MyObject要求的foo: number属性,因此天然符合MyObject的类型兼容要求,默认是允许的。

2. 多余属性检查仅在特定场景触发

我们平时直接给指定类型的变量赋值对象字面量时遇到的「多余属性报错」,是TypeScript为了减少拼写错误等常见问题设计的额外校验规则,不属于类型系统的强制兼容要求,仅在对象字面量直接赋值给明确标注类型的变量/参数时才会触发。
你的代码中带bar属性的对象字面量,是先作为processor的返回值,再经由returnObject泛型函数返回后才赋值给processedObject,中间多了一层函数调用的间接传递,因此不会触发多余属性检查。
类似的合法写法也符合这个规则:

type MyObject = { foo: number };
const temp = { foo: 0, bar: 1 };
// 不会报错,temp不是直接赋值的对象字面量
const obj: MyObject = temp;
如果你需要这类场景触发报错

可以给processor的返回值显式标注类型,此时对象字面量直接对应指定的返回类型,就会触发多余属性检查:

const processedObject: MyObject = returnObject(myObject, (input): MyObject => ({
  ...input,
  bar: 1, // 此处会提示存在多余属性bar
}));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:15:04