TypeScript中如何将类的类型作为函数参数传递?
在TypeScript中实现类似Java的泛型类型参数函数
要实现你说的类似Java中接收Class<T>作为参数的泛型函数,TypeScript里可以用构造函数类型来替代Java的Class<T>,这是最接近的实现方式。
核心实现示例
对应你给出的Java代码,TypeScript的写法大概是这样:
// 先定义一个通用的构造函数类型,方便复用 type Constructor<T> = new (...args: any[]) => T; function getObject<T>(data: string, type: Constructor<T>): T { // 这里模拟ObjectMapper.parseTo的逻辑,实际根据你的解析库调整 const instance = new type(); // 假设把data解析到实例上,比如用JSON.parse后赋值 Object.assign(instance, JSON.parse(data)); return instance; }
调用方式(和Java传Class对象的逻辑一致)
比如你有一个类:
class User { name!: string; age!: number; }
调用getObject的时候直接传类本身就行,就像Java里传User.class:
const user = getObject('{"name":"张三","age":25}', User); // user的类型会被自动推断为User
关于typeof的说明
你提到尝试过typeof,其实typeof在这里是用来获取类的构造函数类型的——比如typeof User就是Constructor<User>,所以上面调用时传入的User本身,其类型就是typeof User,也就是我们定义的Constructor<User>,直接传类就等价于传入了它的构造函数类型。
和Java的区别
TypeScript是结构类型系统,没有Java那种名义上的Class对象,但构造函数类型Constructor<T>完全能满足“传入一个类,返回该类实例”的需求,逻辑上和Java的Class<T>作用一致。
内容的提问来源于stack exchange,提问作者Martin Nielsen
相关产品推荐
相关产品推荐

