You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于TypeScript自定义联合类型构建对应值的数组?

基于TypeScript联合类型生成对应数组(保持单一数据源)

要实现单一数据源、避免重复维护类型和数组内容,最稳妥的方式是反过来操作:先定义运行时的数组,再从数组推导TypeScript类型——因为TypeScript类型仅存在于编译阶段,无法直接转化为运行时的值。

最优实现方案

  1. 定义带有as const的字面量数组,让TypeScript推断出精确的元素类型:
export const fruits = ["apple", "banana", "grape"] as const;
  1. 从数组推导联合类型:
export type Fruit = typeof fruits[number];

这样Fruit类型会自动被推断为"apple" | "banana" | "grape",后续只要修改fruits数组的元素,Fruit类型会同步更新,彻底实现单一数据源,无需手动维护类型与数组的一致性。

若必须先定义类型的妥协方案

如果因场景限制必须先定义Fruit类型,可通过类型守卫验证数组元素合法性,但这种方式仍需手动同步数组内容(无法完全避免重复):

export type Fruit = "apple" | "banana" | "grape";

// 类型守卫:验证值是否属于Fruit类型
function isFruit(value: string): value is Fruit {
  return ["apple", "banana", "grape"].includes(value);
}

// 生成符合类型要求的数组
const fruits = ["apple", "banana", "grape"].filter(isFruit);

这种方式能确保数组元素符合Fruit类型,但数组内容仍需和类型手动同步,不如第一种方案优雅。

内容的提问来源于stack exchange,提问作者Christof Buechi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:22:03