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

如何从类的属性值创建TypeScript联合类型?

实现方案

要从类的属性值中创建对应的联合类型,需要分两步操作:

1. 保留属性值的字面量类型

TypeScript 默认会把对象中的字符串值拓宽为 string 类型,所以首先要确保类的属性值被识别为具体的字面量类型。可以通过 as const 断言实现:

class Names {
  parents = {
    mother: "Susan",
    dad: "Mike"
  } as const;

  children = {
    son: "Peter"
  } as const;
}

2. 提取并合并值类型

通过 TypeScript 的类型操作符,提取类实例属性的所有值类型并合并为联合类型:

// 获取Names类的实例类型
type NamesInstance = InstanceType<typeof Names>;

// 提取parents对象的所有值类型
type ParentsValues = NamesInstance["parents"][keyof NamesInstance["parents"]];
// 提取children对象的所有值类型
type ChildrenValues = NamesInstance["children"][keyof NamesInstance["children"]];

// 合并为最终的联合类型
type NamesICanUse = ParentsValues | ChildrenValues; // 类型为 "Susan" | "Mike" | "Peter"

简化写法

如果想简化代码,可以将类型定义合并为一行:

type NamesICanUse = (InstanceType<typeof Names>["parents"] | InstanceType<typeof Names>["children"])[keyof (InstanceType<typeof Names>["parents"] | InstanceType<typeof Names>["children"])];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:06:25