Есть ли способ в машинописи ограничить параметр, чтобы быть одним из ключей объекта и этот ключ иметь определенный тип? - PullRequest
1 голос
/ 27 апреля 2020

Я хочу знать, возможно ли в машинописи что-то вроде:

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 Ответ

1 голос
/ 27 апреля 2020

Это возможно, используя сопоставленные типы и вывод типа, как в следующем типе, который извлекает только ключи с указанным типом:

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

Здесь используется следующая причина:

  1. Сопоставьте тип (используя сопоставленные типы) со значениями, только если они соответствуют (T[K] extends) желаемому типу (V)
  2. Извлеките ключи, используя { .. }[keyof T

Playground Link

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...