我尝试在typescript中创建一个基本的类装饰器,它什么也不做。
const test = () => <T extends new (...rest: any[]) => InstanceType<T>> (Target: T) => {
class NewTarget extends Target {}
Object.setPrototypeOf(NewTarget.prototype, Object.getPrototypeOf(Target.prototype));
return NewTarget;
};
其用法大致如下:
@test()
class Test {}
new Test();
我无法编译此代码,错误是Base constructor return type 'InstanceType<T>' is not an object type or intersection of object types with statically known members ts(2509)
。我遇到了障碍。
打字机Playground
1条答案
按热度按时间wgeznvg71#
我终于明白了。
每当我们创建一个类的新示例时,它总是返回某种类型的对象(它永远不会返回任何原语类型的对象),所以基本上,我不得不写
Record<never, unknown>
,而不是InstanceType<T>
,现在最后的代码如下所示:这可能是一个打字错误,因为
InstanceType<T>
应该与对象类型兼容,这也是由于上述原因。GitHub issue