为什么我的仿制药无法按预期工作?

时间:2019-09-07 16:15:50

标签: typescript typeorm typescript-generics

编辑:此处有一个最小的示例here

我正在将TypeScript与TypeORM库一起使用。这是“基础” Repository的通用定义:

class Repository<Entity extends ObjectLiteral> {
  find(conditions?: FindConditions<Entity>): Promise<Entity[]>;
}

如果我尝试扩展此类,将Bank类传递为Entity,则它会按预期工作(我在find方法中自动完成) :

class Bank {
  name: string;
}

class BankRepository extends Repository<Bank> {
  public test():void  {
    this.find({ name: 'foo' }); // OK!
  }
}

但是,如果我尝试使用BankModel抽象类使我的通用:

abstract class BankModel {
  foo: string;
}

class BankRepository<E extends BankModel> extends Repository<E> {
  test(foo: string): void {
    this.find({ foo: foo }); // KO!!! 
  }
}

错误是:

  

类型'{foo:string; }”不能分配给“ FindConditions”类型的参数。ts(2345),

FindConditions<E>的声明是:

declare type FindConditions<T> = {
  [P in keyof T]?: FindConditions<T[P]> | FindOperator<FindConditions<T[P]>>;
};

所以..为什么不起作用?

enter image description here

1 个答案:

答案 0 :(得分:0)

我发现什么是Typescript错误。我使用版本3.6.3。