我正在尝试设置一个泛型,其中参数是另一个对象的键。extends keyof
当两种类型都是函数的参数时,我可以使用它来完成此操作。
但是,当提供键列表的类型不是参数,只是泛型类型时,打字稿需要设置两种泛型类型。
考虑以下代码:
interface Bar {
z: string;
t: number;
}
declare function foo1<T extends keyof Bar>(x: T)
let t1 = foo1('z');
declare function foo2<K, T extends keyof K>(x: T)
let t2 = foo2<Bar>('t');
declare function foo3<T>(x: T)
let t3 = foo3<keyof Bar>('t');
foo2
由于T
未指定第二种类型,函数失败。但是我觉得 TS 应该能够在没有明确的第二种类型的情况下推断出正确的类型。
foo3
是我的解决方法,但使用起来不太好,是否可以让 typescript 执行此推理,或者这将是向 TS 团队提交的功能请求/错误报告?
你与foo2
. 这就是让它工作应该做的事情。
declare function foo2<T, K = keyof T>(x: K)
let t2 = foo2<Bar>('t');
您可以将一个类型分配给一个类型(在本例中为 的类型T
),而不是期待一个新的泛型类型参数。
也可以直接将参数类型分配keyof
给给定的泛型类型T
。
declare function foo4<T>(x: keyof T);
let t4 = foo4<Bar>('t');
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句