Убедитесь, что объединение строковых букв принадлежит ключам объекта

#typescript

#typescript

Вопрос:

 export type A = "a" | "b" | "c";

const obj = { a: 4, b: 5, c: 6, d: 7 };
  

Как мне убедиться, что все элементы A являются ключами объекта obj ?

Ответ №1:

В зависимости от того, что вам нужно, вы можете автоматически создать свой тип:

Все ключи как тип

Вы можете использовать keyof , чтобы все ключи были объединены. Поскольку keyof необходимо использовать для типа, keyof typeof obj :

 const obj = { a: 4, b: 5, c: 6, d: 7 };

export type A = keyof typeof obj; // "a" | "b" | "c" | "d"
  

Ссылка на игровую площадку

Удалите некоторые ключи

Затем вы можете Exclude использовать некоторые ключи и получить остальные:

 const obj = { a: 4, b: 5, c: 6, d: 7 };
type AllKeys = keyof typeof obj;
export type A = Exclude<AllKeys, "d">; // "a" | "b" | "c" 
  

Ссылка на игровую площадку

AllKeys тип просто для удобства, вы можете встроить его и использовать Exclude<keyof typeof obj, "d">

Разрешить только некоторые ключи

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

 const obj = { a: 4, b: 5, c: 6, d: 7 };
type AllKeys = keyof typeof obj;
type AllowedKeys = "a" | "b" | "c" | "y" | "z";
export type A = AllKeys amp; AllowedKeys; // "a" | "b" | "c"
  

Ссылка на игровую площадку

Опять же, два типа AllKeys и AllowedKeys приведены здесь для удобства. Вы также можете иметь то же самое, что keyof typeof obj amp; ("a" | "b" | "c" | "y" | "z");