如何忽略“类型实例化太深并且可能是无限的。ts(2589)”打字稿错误?

Dan*_*tos 6 typescript

更新到 Typescript 3.5 后,我收到了很多“类型实例化太深,可能是 infinite.ts(2589)”错误。

我怎么能忽略它们?

代码发生的地方(使用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
    }
}
Run Code Online (Sandbox Code Playgroud)

我注意到只有repo2初始化会抛出错误消息。

Mat*_*vic 16

我设法使错误消失,同时仍然能够使用@ts-ignore正确计算类型。可以在Playground中找到一个示例,简而言之,如果您// @ts-ignore在成熟的开发环境中删除该行,我想代码将无法编译。


Med*_*uly 5

...你应该看到一个错误:

type Test00<T1 extends any[], T2 extends any[]> =
    Reverse<Cast<Reverse<T1>, any[]>, T2>
Run Code Online (Sandbox Code Playgroud)

类型实例化过深并且可能是无限的。ts(2589)

当 TS 决定类型变得太复杂而无法计算(即)时,就会发生这种情况。解决方案是逐步计算导致问题的类型:

type Test01<T1 extends any[], T2 extends any[]> =
    Reverse<Reverse<T1> extends infer R ? Cast<R, any[]> : never, T2>
Run Code Online (Sandbox Code Playgroud)

https://github.com/microsoft/TypeScript/issues/30188#issuecomment-478938437

  • 请为上面提供的代码提供一个工作示例。 (4认同)
  • 我很欣赏这个评论,但它没有告诉我如何忽略该错误。 (3认同)