Как извлечь псевдоним нового типа из значения объекта
const test = {
'a': ['music','bbq','shopping'],
'b': ['move','work']
};
Как получить его из тестового объекта
type Types = 'music' | 'bbq' | 'shopping' | 'move' | 'work'
const test = {
'a': ['music','bbq','shopping'] as const,
'b': ['move','work'] as const
};
type Types = test.a[number] | test.b[number]
Вы можете сделать это довольно легко, используя as const
:
const test = {
'a': ['music','bbq','shopping'],
'b': ['move','work']
} as const;
type Elements = typeof test[keyof typeof test][number];
Единственное решение, которое я могу придумать без использования as const
, — это определение интерфейса с точными элементами массивов:
interface Foo {
a: ['music', 'bbq', 'shopping'],
b: ['move', 'work']
};
type Elements2 = Foo[keyof Foo][number];
Это желаемый эффект, но у меня есть вопрос, что именно делает as const
@laterday Это просто гарантирует, что вы не сможете позже изменить объект, что также сделает ввод недействительным. Без него машинописный текст не сможет вывести точные значения, и Elements2
будет просто string
.
Понятно ли, что если это не так, как const, Elements2 будет выведен как строка вместо точного значения
@позднее точно, извините, если моя формулировка вас смутила;)
Это неправильно, вы не можете найти пространство имен «test», а test, вероятно, имеет много ключей, таких как a и B. Есть ли способ выполнить цикл вместо того, чтобы вводить a и b вручную