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

如何从联合类中提取body属性类型并构建对应类型对象

构建类名加Body后缀的类型映射对象

直接通过映射类型+键重映射结合内置工具类型就能实现需求,完整代码如下:

class Foo {
  body: {foo: string}

  constructor(body: Record<string, string>) {
    this.body = { foo: body.foo }
  }
}

class Bar {
  body: {bar: string}

  constructor(body: Record<string, string>) {
    this.body = { bar: body.bar }
  }
}

const pages = {
  'foo': Foo,
  'bar': Bar
} as const

// 核心类型定义
type PageBodyMap = {
  [K in keyof typeof pages as `${K}Body`]: InstanceType<typeof pages[K]>['body']
}

关键部分解释

  1. 键重映射:使用as ${K}Body``将原pages的键名(foo/bar)拼接成带Body后缀的新键(fooBody/barBody),这是TypeScript 4.1及以上支持的语法。
  2. 获取实例类型:通过内置工具类型InstanceType<typeof pages[K]>,从类的构造函数类型中提取对应的实例类型。
  3. 提取body属性类型:在实例类型后通过['body']直接获取类实例上body属性的类型。

最终PageBodyMap的类型结构完全符合需求:

type PageBodyMap = {
    fooBody: { foo: string };
    barBody: { bar: string };
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:09:26