我正在尝试使用函数初始化类实例属性。我希望将实例属性类型限制为Array<T>
。我尝试使用打字稿推断解压缩T
。
class X {
arr: Array<number>
}
type Unpacked<T> = T extends Array<infer U> ? U : never
function setDefault<T, K extends keyof T>(object: T, key: K, value: Unpacked<T[K]>): void {
object[key] = [value]
}
setDefault(new X(), 'arr', 1);
不幸的是,赋值object[key] = [value]
给了我编译器错误:
TS2322: Type 'Unpacked<T[K]>[]' is not assignable to type 'T[K]'.
我觉得这是一件容易的事,但是我无法理解为什么它不起作用。