返回特定类型的TypeScript键

返回特定类型的TypeScript键,typescript,types,Typescript,Types,如果我有以下类型 interface Foo { bar: string; baz: number; qux: string; } 我是否可以使用typeof键入一个参数,使其只接受返回string('bar'或'qux')的Foo键?您可以在Tyepscript 2.8中使用条件类型: type KeysOfType<T, TProp> = { [P in keyof T]: T[P] extends TProp? P : never }[keyof T]

如果我有以下类型

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

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

您可以在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 
type KeysOfType={[P in keyof T]:T[P]扩展了TProp?P:never}[keyof T];
let onlystring:KeysOfType;
onlystring='baz'//错误
onlystring='bar'//确定
让onlyNumbers:KeysOfType;
onlyNumbers='baz'//确定
onlyNumbers='bar'//错误

谢谢您的回答。在我使用它的过程中,我发现我需要扩展
KeysOfType
以包括
keyof T&{[P..
,否则我不能使用
KeysOfType
来下标
T