如何在TypeScript中从联合类型获取字符串选项数组?
获取TypeScript联合类型对应的字符串数组
方案一:从数组推导类型(推荐)
先定义运行时数组,再基于数组推导联合类型,避免重复维护:
// 用as const固定数组元素的字面量类型 const keyboardTypes = ['default', 'email-address', 'numeric', 'phone-pad', 'number-pad', 'decimal-pad'] as const; // 从数组元素类型生成联合类型 export type KeyboardType = typeof keyboardTypes[number];
这种方式的优势是数组是唯一数据源,修改数组时联合类型会自动同步,不会出现类型和数组不匹配的问题。
方案二:已有类型时对齐数组
如果已经存在KeyboardType联合类型,可通过类型约束确保数组元素完全匹配类型:
export type KeyboardType = 'default' | 'email-address' | 'numeric' | 'phone-pad' | 'number-pad' | 'decimal-pad'; // satisfies关键字(TS 4.9+)确保数组元素符合类型,as const保留字面量类型 const keyboardTypes = ['default', 'email-address', 'numeric', 'phone-pad', 'number-pad', 'decimal-pad'] as const satisfies readonly KeyboardType[];
当KeyboardType类型修改后,数组如果没有同步更新,TypeScript会直接报错,强制保持两者一致。
注意事项
TypeScript是编译时类型系统,无法直接从编译时类型生成运行时数组,必须手动定义数组并通过类型约束对齐,上述两种方案都是为了在手写数组的同时,利用TS的类型检查避免不一致问题。
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

