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

TypeScript中如何为联合类型定义单一类型以避免重复代码?

当然可以!用TypeScript类型别名轻松解决重复联合类型问题

完全不用依赖enum或者any,TypeScript的**类型别名(Type Aliases)**就是为这类场景量身打造的——它能让你把重复的联合类型定义一次,然后在任何需要的地方复用,既保证类型安全,又能减少冗余代码。

基本用法示例

首先,把你的联合类型抽成一个单独的类型别名:

// 定义一次,全局复用
type BarOptions = 'a' | 'b' | 'z' | 'AA';

然后在所有需要这个联合类型的方法里直接引用它就行,不管是参数还是返回值:

// 参数使用类型别名
function foo(bar: BarOptions) {
  // ...函数逻辑
}

// 返回值也可以用
function getBar(): BarOptions {
  return 'a'; // 类型检查会确保返回值符合要求
}

// 其他同类型参数的方法也直接复用
function anotherFunction(input: BarOptions) {
  // ...
}

进阶:从常量数组生成联合类型

如果你的选项是从现有业务常量来的,还可以用const断言自动生成联合类型,避免手动重复写字面量:

// 定义常量数组,用as const让TypeScript保留字面量类型
const BAR_OPTIONS = ['a', 'b', 'z', 'AA'] as const;

// 从数组类型自动推导联合类型
type BarOptions = typeof BAR_OPTIONS[number];

这样后续如果要新增选项,只需要修改数组,类型会自动更新,更便于维护。

跨文件复用

如果这个类型需要在多个文件里使用,直接导出它就行:

// types.ts 文件
export type BarOptions = 'a' | 'b' | 'z' | 'AA';

然后在其他文件导入:

import { BarOptions } from './types';

function foo(bar: BarOptions) { /* ... */ }

这种方式完全满足你的需求:没有使用enum或any,类型检查严格,还彻底消除了重复代码的问题。

内容的提问来源于stack exchange,提问作者Hamed Mahdizadeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:33:00