Codesandbox在文件 weird.spec.ts 中测试失败(忽略React内容)。
要查看失败的测试,请单击右上角的显示测试。
我有一个用于验证的类和装饰器:
function Validate(original: any) {
return (class extends original {
constructor(...args: any[]) {
super(...args);
// some validation here,
// throwing a custom error
}
}
) as any;
}
@Validate
export class Weird {
public value: string;
constructor(value: string) {
this.value = value;
}
static thing = new Weird('thing');
}
我的问题(在失败的测试中可以看出)是
Weird.thing instanceof Weird // false
我也尝试为此使用吸气剂,它可以按预期工作,但是每次都会返回一个新实例。我真正想要的是:
我需要调整什么才能更改当前行为以符合我的需求?
答案 0 :(得分:1)
这是known issue,静态初始化程序在应用装饰器之前运行,因此会看到未修饰的类。解决方法是,您可以在类定义之后设置Weird.thing
:
@Validate
class Weird {
public value: string;
constructor(value: string) {
this.value = value;
}
static thing: Weird;
}
Weird.thing = new Weird('thing');