我有以下代码片段,我觉得很难理解:
export class Record{
};
export class RecordMissingExtendsError{
constructor(r:any){
}
}
export function Model() {
return <T extends { new(...args: any[]): {} }>(ctr: T) => {
if (!(ctr.prototype instanceof Record)) {
throw new RecordMissingExtendsError(ctr);
}
return (class extends ctr {
constructor(...args: any[]) {
const [data] = args;
if (data instanceof ctr) {
return data;
}
super(...args);
(this as any)._completeInitialization();
}
});
};
}
我很难理解上面的代码并且理解如下:
模型返回类型 T(我知道泛型是什么,所以不用担心解释泛型)其中
T extends { new(...args: any[]): {}
上面是什么意思?是否要保留现有属性以及额外的附加功能?
另外你能解释一下函数返回类型吗?我们是否要向 T 添加一个额外的构造函数?
(class extends ctr {
constructor(...args: any[]) {
const [data] = args;
if (data instanceof ctr) {
return data;
}
super(...args);
(this as any)._completeInitialization();
}
});