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

Posted

技术标签:

【中文标题】打字稿 |从对象 T 中提取具有类型 K 值的所有键名【英文标题】:Typescript | extract from an object T all key names with values of type K 【发布时间】:2020-08-12 01:30:23 【问题描述】:

我有一些接口/对象

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】:
 type ExtractKeysOfValueType<T, K> =  [I in keyof T]: T[I] extends K ? I : never [keyof T];

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

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

然后取所有值的类型,导致never | "s",而never 从联合中省略,导致想要的类型。

【讨论】:

``` ExtractKeysOfValueType //"s" | "ss" | “作为” | "b" | "n" | 1 ``` 不 :-( 啊,对了,keyof a: never 并没有像我想象的那样工作,但是类似的方法可以工作:映射到密钥本身,然后进行联合。

以上是关于打字稿 |从对象 T 中提取具有类型 K 值的所有键名的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个从打字稿中的类中提取所有方法的类型?

具有未知键的对象的打字稿类型,但只有数值?

具有默认参数值的打字稿条件返回类型

打字稿中具有通用键的对象

具有定义值的打字稿动态对象键

具有基于变量的标签值的打字稿匿名对象