我有一个类装饰器,它带有一个对象数组,这些对象定义了装饰器类必须实现的必需函数“ tick”的参数。
这是我的装饰师
type ConvertInstanceTypes<T extends unknown[]> = {
[K in keyof T]: T[K] extends Constructor<unknown>
? InstanceType<T[K]>
: never;
};
type TSystem<Args extends ComponentArray> = Required<{
tick: (components: ConvertInstanceTypes<Args>) => void;
}>;
function System<TComps extends ComponentArray>(...components: TComps) {
return (ctor: Constructor<TSystem<TComps>>) => {
// do meta stuff ...
};
}
使用示例:
class Position {
x = 0;
y = 0;
}
class Model {
icon = "";
}
@System(Position, Model)
class TestSystem {
tick([pos, model]) { //implicit any
console.log(pos, model);
}
}
但是,即使应提供类型信息(由装饰器提供),这也会在“刻度”参数上显示错误implicitly has an 'any' type
。是否有任何方法可以从装饰器获取类型信息,而无需在函数内部定义类型,例如:[pos, model]: [Position, Model]
。还是在Typescript中无法进行这种类型的上下文类型输入?