打字稿:定义类似keyof的类型,但具有特定的值类型

时间:2020-04-02 06:39:53

标签: typescript types

我有界面

interface MyInterface {
  field1: boolean,
  field2: MyType,
  field3: MyType
}

,并且我想创建一个包含此接口键的类型,但仅包含那些在接口中使用的键具有MyType类型值的类型。我知道keyof的存在,但是它将返回所有不需要的键,甚至field1。那么如何只用field2field3键入文字呢?

1 个答案:

答案 0 :(得分:1)

您可以创建映射类型,以检查值是否扩展了MyType,如果是,则获取键,否则放置never,然后使用所有可能的键对其进行索引(以生成键的并集,以表示其值扩展MyType):

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

type MyTypeKeys = PickKeysOfType<MyInterface, MyType> // "field2" | "field3"

Playground