Как извлечь псевдоним нового типа из значения объекта

Как извлечь псевдоним нового типа из значения объекта

const test = {
'a': ['music','bbq','shopping'],
'b': ['move','work']
};

Как получить его из тестового объекта

type Types = 'music' | 'bbq' | 'shopping' | 'move' | 'work'
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

const test = {
  'a': ['music','bbq','shopping'] as const,
  'b': ['move','work'] as const
};

type Types = test.a[number] | test.b[number]

Это неправильно, вы не можете найти пространство имен «test», а test, вероятно, имеет много ключей, таких как a и B. Есть ли способ выполнить цикл вместо того, чтобы вводить a и b вручную

laterday 12.04.2023 12:43
Ответ принят как подходящий

Вы можете сделать это довольно легко, используя 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 12.04.2023 15:02

@laterday Это просто гарантирует, что вы не сможете позже изменить объект, что также сделает ввод недействительным. Без него машинописный текст не сможет вывести точные значения, и Elements2 будет просто string.

Cuzy 12.04.2023 15:08

Понятно ли, что если это не так, как const, Elements2 будет выведен как строка вместо точного значения

laterday 12.04.2023 17:37

@позднее точно, извините, если моя формулировка вас смутила;)

Cuzy 12.04.2023 18:26

Другие вопросы по теме