TypeScript keyof返回特定类型

时间:2018-04-10 11:11:56

标签: typescript types

如果我有以下类型

interface Foo {
    bar: string;
    baz: number;
    qux: string;
}

我可以使用typeof输入一个参数,使Foo只返回string'bar''qux')吗?

1 个答案:

答案 0 :(得分:11)

您可以在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