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

如何从TypeScript类自动生成对应的TypeScript接口?

解决方案:自定义工具类型自动生成公开接口

你可以通过自定义一个类似Partial<T>的工具类型,自动将类的所有实例成员(包括继承来的)转为公开的接口类型,无需手动收集成员。

实现工具类型

首先定义Publicize<T>工具类型,它会遍历类的所有实例成员并生成对应的公开接口:

type Publicize<T> = {
  [K in keyof T]: T[K];
};

这个类型的原理很简单:通过映射类型遍历T的所有键(包括受保护、私有成员,TypeScript类型系统允许在类型层面访问这些成员),并保留原成员的类型,最终生成的类型就是一个所有成员均为公开的接口。

结合你的场景使用

用这个工具类型改造你原来的代码,无需手动编写包含所有成员的接口:

class A {
  protected do() {
    console.log("do");
  }
}

// 自动生成A的公开接口类型
type PublicA = Publicize<A>;

// 声明合并:让类B同时实现公开接口并继承原类
interface B extends PublicA {}
class B extends A {}

class C {
  public static readonly D = class D extends B {}
}

const d = new C.D();
d.do(); // 类型检查通过,编译正常

这样一来,不管父类A有多少受保护/私有成员,Publicize<A>都会自动生成包含所有成员的公开接口,彻底省去手动收集的工作量。

注意事项

  • 这个工具类型会处理类的所有实例成员,包括继承链上的成员,无需额外配置。
  • 当启用declaration配置时,类表达式继承经过声明合并的类(如B),不会触发可访问性错误,因为接口已经将所有成员转为公开,满足类型声明生成的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:02:33