При работе с TypeScript вам может понадобиться определить тип объединения и массив, содержащий все возможные значения этого типа. Распространенный подход — написать что-то вроде этого:
type Taste = 'しょうゆ' | 'みそ' | 'とんこつ'; const tastes = ['しょうゆ', 'みそ', 'とんこつ'];
На первый взгляд, все в порядке. Однако здесь есть скрытая проблема: каждый раз, когда вы хотите изменить или добавить опцию, вам нужно обновить как тип объединения вкусов, так и массив вкусов. Такое дублирование усилий может привести к ошибкам и сделать поддержку кода более утомительной.
К счастью, есть способ упростить эту задачу, уменьшив избыточность. Используя утверждение as const и typeof в TypeScript, вы можете объединить определения типа объединения и массива в одном месте. Вот как вы можете реорганизовать приведенный выше код:
const tastes = ['しょうゆ', 'みそ', 'とんこつ'] as const; type Taste = (typeof tastes)[number];
Этот подход имеет ряд преимуществ:
Единый источник истины:
Вы определяете список значений только один раз в массиве вкусов. Тип Taste автоматически извлекается из этого массива, поэтому, если вам когда-нибудь понадобится обновить список, вам нужно будет сделать это только в одном месте.
Тип безопасности:
Используя константу, TypeScript рассматривает массив вкусов как кортеж с литеральными типами, а не просто массив строк. Это гарантирует, что тип вкуса остается точным и соответствует значениям вкусов.
Лучшее обслуживание:
Поскольку тип 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 более удобным в сопровождении и масштабируемости. Это особенно полезно, когда вы имеете дело с большими наборами значений или когда ваша кодовая база со временем растет.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3