更新到 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在成熟的开发环境中删除该行,我想代码将无法编译。
...你应该看到一个错误:
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
| 归档时间: |
|
| 查看次数: |
6253 次 |
| 最近记录: |