根据在typescript中作为参数接收的类定义方法返回类型

根据在typescript中作为参数接收的类定义方法返回类型,typescript,types,Typescript,Types,是否可以根据参数接收的类的静态属性强制函数的返回类型 在下面的代码中,我希望变量foo的类型为Date,等于作为参数接收的类的returnType属性,但我不知道如何实现,或者是否可能 函数寄存器(构造函数:T,…参数:构造函数参数){ //错误\\ 返回新构造函数(…参数); } 课堂讨论{ 静态返回类型:日期 构造函数(p1:string,p2:number,p3:object){} } 设foo=寄存器(Clazz,“,1,{}); 请参见下图以更好地说明: 另一幅图来说明: 首先,您

是否可以根据参数接收的类的静态属性强制函数的返回类型

在下面的代码中,我希望变量foo的类型为Date,等于作为参数接收的类的
returnType
属性,但我不知道如何实现,或者是否可能

函数寄存器(构造函数:T,…参数:构造函数参数){
//错误\\
返回新构造函数(…参数);
}
课堂讨论{
静态返回类型:日期
构造函数(p1:string,p2:number,p3:object){}
}
设foo=寄存器(Clazz,“,1,{});
请参见下图以更好地说明:

另一幅图来说明:


首先,您可以创建一个类型,以请求定义了
returnType
的类(静态属性):

然后您知道可以通过推理提取
returnType
,如下所示:

type ClassReturnType<T extends ClassWithReturnType> = T['returnType'] extends infer R ? R : never;

哦,谢谢,这正是我需要的。关于“我在用这个做什么”,我正在创建返回代理的类,以截获一些属性,但我想让用户像以前一样继续使用该类。啊,不错,没有考虑代理!
type ClassReturnType<T extends ClassWithReturnType> = T['returnType'] extends infer R ? R : never;
function register<T extends ClassWithReturnType>(constructor: T, ...args: ConstructorParameters<T>): ClassReturnType<T> {
    return (new constructor(...args));
}
type ClassWithReturnType = { new(...args: any[]): any; returnType: any; };
type ClassReturnType<T extends ClassWithReturnType> = T['returnType'] extends infer R ? R : never;

function register<T extends ClassWithReturnType>(constructor: T, ...args: ConstructorParameters<T>): ClassReturnType<T> {
    return (new constructor(...args));
}

class Clazz {
    static returnType: Date;
    constructor(p1: string, p2: number, p3: object) { }
}

let foo = register(Clazz, "", 1, {});