存在上下文typeinfo,但仍从类方法参数中“隐含任何”

时间:2019-10-12 07:28:04

标签: typescript typescript-generics

我有一个类装饰器,它带有一个对象数组,这些对象定义了装饰器类必须实现的必需函数“ 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中无法进行这种类型的上下文类型输入?

0 个答案:

没有答案