如何在TypeScript中动态将类转换为接口?
在TypeScript中从类动态提取仅含属性的接口
可以用TypeScript的条件类型工具,自动从类里提取仅包含实例属性(排除方法)的接口类型,具体步骤如下:
1. 定义提取实例属性的通用工具类型
这个类型会遍历类的所有成员,只保留非方法的属性:
type ExtractInstanceProperties<T> = { [K in keyof T as T[K] extends Function ? never : K]: T[K] };
2. 对目标类使用该工具类型
针对你定义的A类,直接用工具类型生成对应的接口类型:
class A { private a:string; constructor(a:string) { this.a = a; } GetA() { return this.a; } } // 生成仅含属性的类型,等价于你想要的接口 type AInterface = ExtractInstanceProperties<A>;
生成后的AInterface类型完全等同于:
interface AInterface { a: string; }
补充说明
- 类实例传入Web Worker时,会被结构化克隆序列化,方法会被自动丢弃,只剩可枚举的实例属性,这个工具类型正好匹配序列化后的对象结构。
- 如果类里有私有/受保护属性,生成的类型会带对应的修饰符,但这不影响和Web Worker返回的普通对象兼容——TypeScript在运行时不会检查访问修饰符的限制。
内容的提问来源于stack exchange,提问作者omega
相关产品推荐
相关产品推荐

