Avatar ·

错误 TS2322:"could be instantiated with a different subtype of constraint 'object'" — 如何修复?

你好!我是 TypeScript 新手,在使用泛型时遇到了一个奇怪的错误。 我有一个简单的函数,它应该接受一个对象并返回其键。我希望该函数能处理任何对象,同时保留返回类型为该对象的键数组。 这是我的代码: ```typescript function getKeys(obj: T): (keyof T)[] { return Object.keys(obj) as (keyof T)[]; } function processObject(data: T) { // 这里我想将 data 传递给另一个函数 const handler = (input: U): void => { const keys = getKeys(input); console.log(keys); }; handler(data); // 这里出错! } ``` TypeScript 报错: `Argument of type 'T' is not assignable to parameter of type 'U'. 'U' could be instantiated with a different subtype of constraint 'object'.` 我不明白为什么会这样。毕竟 T 和 U 都受限于 `object` 类型。为什么 TypeScript 会报错呢?