错误 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 会报错呢?