我正在尝试设置一个泛型,其中参数是另一个对象的键。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 团队的功能请求/错误报告?