Тип для с одинаковыми именами полей, но разными типами - PullRequest
0 голосов
/ 18 января 2020

Предположим, у меня есть тип, подобный следующему:

type Thing = {
    aField: string;
    anotherField: number;
    // ...
}

Я хотел бы создать тип "маска", который имеет все те же поля, но с логическими значениями:

type ThingMask = {
    aField: boolean;
    anotherField: boolean;
    // ...
}

Есть ли способ сделать это программно, без необходимости жестко кодировать тип маски?

1 Ответ

1 голос
/ 18 января 2020

Да, вам нужен сопоставленный тип :

type ThingMask = { [K in keyof Thing]: boolean };
/* type ThingMask = {
    aField: boolean;
    anotherField: boolean;
} */

Обратите внимание, что по умолчанию это также скопирует readonly и дополнительные (?) модификаторы из исходного типа к отображенному типу. Если вы не хотите, чтобы это произошло, вы можете изменить это поведение , используя такие модификаторы, как -readonly или -?. Но так как вы не спросили об этом, я не буду в это углубляться go.

Надеюсь, это поможет; удачи!

ссылка на код в Playground

...