打字稿|从对象中提取所有类型为T的键名

时间:2020-04-28 09:19:41

标签: javascript typescript generics typescript-generics

我有一些接口/对象

interface Example1 {
    1: object,
    2: string,
    s: string,
    ss: string,
    as: string[],
    b: boolean,
    n: number
}

有一种方法只能获取类型为T的字符串类型的键?

预期结果:

type ExtractKeysOfValueType<T extends object,K> = ... // do the magic,
ExtractKeysOfValueType<Example1,string> // 's' | 'ss'

我已经使用“提取”来获取字符串类型的键,但不包括符号和数字,但是我不知道该如何满足我的需求

1 个答案:

答案 0 :(得分:2)

 type ExtractKeysOfValueType<T, K> = { [I in keyof T]: T[I] extends K ? I : never }[keyof T];

this issuetry it的启发。这基本上首先将对象映射到键-键对象,并且将相关值不是所需类型的键映射到从不:

 { 1: object, s: string } -> { 1: never, s: "s" }

然后获取所有值的类型,结果为never | "s",而从联合中省略never,从而得到所需的类型。