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

泛型中的自引用实现:如何让类型C返回{ a: C }?

TypeScript泛型自引用实现方案

要让type C = B<C>生成{ a: C }的类型,可根据TypeScript版本选择以下方案:

1. 现代TypeScript版本(3.7+):直接使用递归类型别名

TypeScript 3.7及以上版本已支持递归类型别名,你的代码无需修改即可正常工作:

type B<T> = { a: T }
type C = B<C> // 此时 C 完全等价于 { a: C }

验证示例:

// 类型校验通过,说明 test.a 的类型确实是 C
const test: C = { a: null! }
test.a = test

2. 低版本TypeScript:用接口实现自引用

如果环境仍使用3.7以下版本,可改用接口实现——接口天然支持自引用:

interface B<T> {
  a: T
}
interface C extends B<C> {}

该写法同样能让C的类型为{ a: C }。

实用场景

当你构建的对象包含返回自身(this)的方法时,这种自引用泛型能精准约束类型。比如链式调用API:

type Chainable<T> = {
  set<K extends string>(key: K, value: any): Chainable<T & { [P in K]: typeof value }>
  get(): T
}

// 自引用构建完整链式类型
type MyChain = Chainable<{}>
const chain: MyChain = {
  set(key, value) {
    return { ...this, [key]: value } as MyChain
  },
  get() {
    return this as unknown as {}
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:17:31