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

TypeScript是否支持类似Swift中可携带参数的Enum枚举类型?

TypeScript 实现带关联值枚举的方案

完全可以实现和你给出的Swift代码同等的效果。TypeScript 原生的enum语法本身不支持关联值特性,但可以通过可辨识联合(Discriminated Union) 方案完美覆盖这个需求,且能保证和Swift枚举一致的类型安全特性。

基础实现示例

对应你给出的Swift代码,TypeScript 实现如下:

// 分别定义每个枚举项的类型,包含统一的辨识字段(本例用type,字段值为唯一的字符串字面量)
type UPC = {
  type: 'upc'
  payload: [number, number, number, number]
}

type QRCode = {
  type: 'qrCode'
  payload: string
}

// 联合后得到等价的带关联值的枚举类型
type Barcode = UPC | QRCode

使用方式

和Swift枚举的使用逻辑完全一致,你可以通过switch分支做类型收窄,TypeScript会自动推导每个分支下的关联值类型:

// 构造实例
let productCode: Barcode = {
  type: 'upc',
  payload: [8, 85909, 51226, 3]
}

let qrCode: Barcode = {
  type: 'qrCode',
  payload: "ABCDEFGHIJKLMN"
}

// 分支匹配使用
function printBarcodeInfo(code: Barcode) {
  switch(code.type) {
    case 'upc':
      // 此处TS自动识别payload为四个数字组成的元组
      console.log(`UPC编码:${code.payload.join(' ')}`)
      break
    case 'qrCode':
      // 此处TS自动识别payload为字符串
      console.log(`QR码内容:${code.payload}`)
      break
  }
}

简化调用(贴近Swift语法)

如果想要和SwiftBarcode.upc(xxx,xxx,xxx,xxx)一样的调用体验,可以额外封装工厂方法:

const Barcode = {
  upc: (a: number, b: number, c: number, d: number): Barcode => ({
    type: 'upc',
    payload: [a, b, c, d]
  }),
  qrCode: (content: string): Barcode => ({
    type: 'qrCode',
    payload: content
  })
}

// 调用方式和Swift几乎无差异
let testUpc = Barcode.upc(1, 2, 3, 4)
let testQr = Barcode.qrCode("测试内容")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:06:04