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

Súvisiace články