首页 > 解决方案 > 推断的泛型返回类型接受具有未知属性的对象

问题描述

考虑以下:

function returnObject<T>(input: T, processor: (input: T) => T): T {
  return processor(input);
}

type MyObject = {
  foo: number;
};

const myObject: MyObject = { foo: 0 };

const processedObject: MyObject = returnObject(myObject, (input) => ({
  ...input,
  bar: 1,
}));

console.log(processedObject);

这将构建并运行,输出:

{ foo: 0, bar: 1 }

我遇到的问题是它不应该构建。的第二个参数returnObject是将bar属性添加到结果中,我希望这会引发类型错误,因为bar它不是MyObject. 事实上,检查processedObjecttsserver 中的类型,产生MyObject- 所以看起来 Typescript 实际上被愚弄了,认为它是MyObject基于推断类型的有效(无论有没有明确的: MyObjectafter ,行为都是相同的const processedObject)。

我不确定这是否是 Typescript 中的错误,但对我来说这似乎不是预期的行为?

标签: typescriptinferred-type

解决方案


推荐阅读