Машинопись | извлечь из объекта все ключевые имена со значениями типа T - PullRequest
1 голос
/ 28 апреля 2020

У меня есть несколько интерфейсов / объектов

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

есть способ получить только ключи типа string, которые имеют значения типа T?

ожидаемый результат:

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

Я уже использую «Извлечь», чтобы получить ключи типа string, исключая символы и цифры, но я не знаю, как go продолжить с моими потребностями

1 Ответ

1 голос
/ 28 апреля 2020
 type ExtractKeysOfValueType<T, K> = { [I in keyof T]: T[I] extends K ? I : never }[keyof T];

Вдохновлен этой проблемой , попробуем . Это в первую очередь сопоставляет объект с ключом-ключом и ключами, в которых связанное значение не является искомым type get mapped to never:

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

Затем берется тип всех значений, в результате чего never | "s", а never исключается из объединения, в результате чего получается требуемый тип.

...