打字稿中是否有一种方法可以将参数限制为对象的键之一,并且该键具有某种类型?

时间:2020-04-27 11:43:13

标签: typescript

我想知道打字稿中是否可能有类似内容:

func<T,V>(prop: keyof T: V)

interface IIntf{
  prop1: string,
  prop2: number
}

func<IIntf, string>(‘prop1’) //OK
func<IIntf, string>(‘prop2’) //NOT OK (prop2 is of type number)

1 个答案:

答案 0 :(得分:1)

使用映射的类型和类型推断是可能的,例如以下类型将仅提取具有指定类型的键:

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

这里的理由是:

  1. 仅当类型(使用映射类型)与所需类型(T[K] extends)匹配(V)相匹配时,才将其映射到值
  2. 使用{ .. }[keyof T
  3. 提取密钥

Playground Link