«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Упрощение типов объединения и массивов в TypeScript

Упрощение типов объединения и массивов в TypeScript

Опубликовано 8 ноября 2024 г.
Просматривать:315

Simplifying Union Types and Arrays in TypeScript

При работе с TypeScript вам может понадобиться определить тип объединения и массив, содержащий все возможные значения этого типа. Распространенный подход — написать что-то вроде этого:

type Taste = 'しょうゆ' | 'みそ' | 'とんこつ';
const tastes = ['しょうゆ', 'みそ', 'とんこつ'];

На первый взгляд, все в порядке. Однако здесь есть скрытая проблема: каждый раз, когда вы хотите изменить или добавить опцию, вам нужно обновить как тип объединения вкусов, так и массив вкусов. Такое дублирование усилий может привести к ошибкам и сделать поддержку кода более утомительной.

К счастью, есть способ упростить эту задачу, уменьшив избыточность. Используя утверждение as const и typeof в TypeScript, вы можете объединить определения типа объединения и массива в одном месте. Вот как вы можете реорганизовать приведенный выше код:

const tastes = ['しょうゆ', 'みそ', 'とんこつ'] as const;
type Taste = (typeof tastes)[number];

Этот подход имеет ряд преимуществ:

  1. Единый источник истины:

    Вы определяете список значений только один раз в массиве вкусов. Тип Taste автоматически извлекается из этого массива, поэтому, если вам когда-нибудь понадобится обновить список, вам нужно будет сделать это только в одном месте.

  2. Тип безопасности:

    Используя константу, TypeScript рассматривает массив вкусов как кортеж с литеральными типами, а не просто массив строк. Это гарантирует, что тип вкуса остается точным и соответствует значениям вкусов.

  3. Лучшее обслуживание:

    Поскольку тип Taste генерируется из массива, риск несоответствия типа и фактических значений отсутствует. Это снижает вероятность возникновения ошибок и упрощает поддержку кода.

Пример использования

Теперь всякий раз, когда вы используете тип Taste в своем коде, он гарантированно соответствует значениям в массиве вкусов:

function describeTaste(taste: Taste): string {
  switch (taste) {
    case 'しょうゆ':
      return 'Savory soy sauce flavor.';
    case 'みそ':
      return 'Rich miso flavor.';
    case 'とんこつ':
      return 'Creamy pork broth flavor.';
    default:
      return 'Unknown taste';
  }
}

const allTastes: Taste[] = tastes; // Safe, because they match the type!

Этот шаблон не только улучшает читаемость вашего кода, но также гарантирует, что он менее подвержен ошибкам, особенно при работе с несколькими значениями, которые необходимо синхронизировать.

Приняв эту стратегию, вы сможете сделать свой код TypeScript более удобным в сопровождении и масштабируемости. Это особенно полезно, когда вы имеете дело с большими наборами значений или когда ваша кодовая база со временем растет.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/mktoho12/simplifying-union-types-and-arrays-in-typescript-i60?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3