Arj*_*jes 3 generics typescript typescript2.0
我正在尝试设置一个泛型,其中参数是另一个对象的键。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');
Run Code Online (Sandbox Code Playgroud)
由于未指定foo2第二种类型,函数失败。T不过我觉得 TS 应该能够在没有明确的第二种类型的情况下推断出正确的类型。
foo3是我的解决方法,但使用起来不太好,是否可以让打字稿执行此推理,或者这将是向 TS 团队的功能请求/错误报告?
你与 很接近foo2。这就是让它发挥作用应该做的事情。
declare function foo2<T, K = keyof T>(x: K)
let t2 = foo2<Bar>('t');
Run Code Online (Sandbox Code Playgroud)
您可以将一个参数分配给一种类型(在本例中为 的类型T),而不是期待新的泛型类型参数。
也可以直接将参数类型分配给给keyof定的泛型类型T。
declare function foo4<T>(x: keyof T);
let t4 = foo4<Bar>('t');
Run Code Online (Sandbox Code Playgroud)