如何在TypeScript中定义提取类型所有公开成员的泛型工具
实现方案
TypeScript 中 keyof 运算符默认不会枚举类的 private、protected 修饰的成员,结合内置的 Pick 工具类型即可实现需求,适配你使用的 4.3.5 版本:
type PublicProps<T> = Pick<T, keyof T>
效果验证
class Thing { public name: string private secret: string public greet(): string { return '' } private curse(): string { return '' } } // 最终得到的类型等价于 { name: string; greet(): string } type ThingPublic = PublicProps<Thing>
补充说明
- 如果你传入的是类的构造函数类型而非实例类型,可以先通过内置的
InstanceType工具类型转换后再处理:
type PublicPropsFromCtor<C extends new (...args: any[]) => any> = PublicProps<InstanceType<C>> // 使用示例 type ThingPublic2 = PublicPropsFromCtor<typeof Thing>
内容的提问来源于stack exchange,提问作者BeetleJuice
相关产品推荐
相关产品推荐

