#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");