ako ignorovať chybu TypeScript "Type instantiation is excessively deep and possibly infinite. ts(2589)"?
Po aktualizácii na Typescript 3.5 dostávam veľa chýb „Inštancovanie typu je nadmerne hlboké a pravdepodobne nekonečné.ts(2589)“.
Ako ich môžem ignorovať?
Kde sa deje kód (používajúc TypeORM)
import { Connection, Repository, Entity, BaseEntity, createConnection } from 'typeorm';
@Entity()
class MyEntity extends BaseEntity {
public id: number;
}
class Test {
async test() {
const connection: Connection = await createConnection();
const repo1 = connection.getRepository(MyEntity);
const repo2: Repository<MyEntity> = connection.getRepository(MyEntity); // only here cast the error above
}
}
Poznamenal som si, že iba inicializácia repo2 vyvolala chybové hlásenie.
Odpoveď č. 1
Podarilo sa mi odstrániť chybu a zároveň byť schopný správne vypočítať typ pomocou použitia @ts-ignore. Príklad je možné nájsť v playgrounde, v skratke, ak odstránite // @ts-ignore, v plnohodnotnom vývojovom prostredí si predstavujem, že by sa kód neskompiloval.
Odpoveď č. 2
... Mali by ste vidieť chybu:
type Test00<T1 extends any[], T2 extends any[]> =
Reverse<Cast<Reverse<T1>, any[]>, T2>
Inštancia typu je príliš hlboká a možno nekonečná. ts(2589)
Stáva sa to, keď TS rozhodne, že typy sú príliš komplexné na výpočet (t.j.). Riešením je vypočítať typy, ktoré spôsobujú problémy, krok za krokom:
type Test01<T1 extends any[], T2 extends any[]> =
Reverse<Reverse<T1> extends infer R ? Cast<R, any[]> : never, T2>
https://github.com/microsoft/TypeScript/issues/30188#issuecomment-478938437
