Нет способа получить значения из типа в стандартном машинописном тексте (могут быть некоторые неофициальные расширения языка, которые допускают это)
Вы можете получить тип, который является объединением всех kind
s:
type OptionsKind = Options['kind'] // "cash" | "paypal" | "credit"
Вы также можете создать объект, который ДОЛЖЕН иметь все свойства объединения, и использовать Object.keys
для получения массива из этого объекта:
type OptionsKind = Options['kind'] // "cash" | "paypal" | "credit"
let OptionsKind: { [P in OptionsKind]: 1 } = {
cash: 1,
credit: 1,
paypal: 1
}
let OptionsKindArray = Object.keys(OptionsKind);
Это решение гарантирует, что вы получите сообщение об ошибке, если у вас есть какие-либо дополнительные ключи в объекте, если у вас нет всех ключей в объекте и если вы ошиблись в написании каких-либо ключей. Таким образом, в основном это гарантирует, что повторяющиеся данные, по крайней мере, всегда актуальны.
Вы можете даже создать вспомогательную функцию для любого объединения:
type OptionKinds = Options['kind'] // "cash" | "paypal" | "credit"
function unionValues<T extends string>(o: Record<T, 1>) {
return Object.keys(o) as T[];
}
let OptionKinds = unionValues<OptionKinds>({ cash: 1, paypal: 1, credit: 1 });