TypeScript keyof返回特定类型

Lev*_*lho 10 types typescript

如果我有以下类型

interface Foo {
    bar: string;
    baz: number;
    qux: string;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用typeof键入一个参数,使它只接受Foo返回string('bar''qux')的键?

Tit*_*mir 17

你可以在Tyepscript 2.8中使用条件类型:

type KeysOfType<T, TProp> = { [P in keyof T]: T[P] extends TProp? P : never}[keyof T];

let onlyStrings: KeysOfType<Foo, string>;
onlyStrings = 'baz' // error
onlyStrings = 'bar' // ok

let onlyNumbers: KeysOfType<Foo, number>;
onlyNumbers = 'baz' // ok
onlyNumbers = 'bar' // error 
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回答。在我使用它的过程中,我发现我需要扩展`KeysOfType`以包含`keyof T &amp; { [P ....``,否则我无法使用`KeysOfType`来下标`T`。 (2认同)