kako ignorirati grešku TypeScript "Type instantiation is excessively deep and possibly infinite. ts(2589)"?


Nakon nadogradnje na Typescript 3.5 dobivam puno pogrešaka "Type instantiation is excessively deep and possibly infinite.ts(2589)".

Kako ih mogu ignorirati?

Gdje se događa kod (koristeći 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
    }
}

Primijetio sam da je samo inicijalizacija repo2 bacila poruku o pogrešci.

Odgovor #1

Uspio sam ukloniti pogrešku, a da još uvijek mogu ispravno izračunati tip koristeći @ts-ignore. Primjer se može pronaći u igralištu, ukratko, ako uklonite // @ts-ignore, u potpuno razvijenom razvojnom okruženju, pretpostavljam da se linija koda ne bi kompajlirala.

Odgovor #2

... Trebali biste vidjeti pogrešku:

type Test00<T1 extends any[], T2 extends any[]> =
    Reverse<Cast<Reverse<T1>, any[]>, T2>

Instanciranje tipa je previše duboko i moguće beskonačno. ts(2589)

To se događa kada TS odluči da su tipovi previše složeni za izračunavanje (npr.). Rješenje je izračunati tipove koji uzrokuju probleme korak po korak:

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

Povezani članci