TypeORM发生“类型实例化太深,可能是infinite.ts(2589)”,在存储库类型上出错

Dan*_*tos 7 typescript typescript-typings typeorm

在更新到VSCode 2019年8月(1.38版)和Typescript 3.6之后,Type instantiation is excessively deep and possibly 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 myRepo: Repository<MyEntity> = connection.getRepository(MyEntity); // only here cast the error above
    }
}
Run Code Online (Sandbox Code Playgroud)

如何忽略或修复它们?

  • VSCode v1.38.0(用户设置)
  • Node.js v10.11.0
  • 打字稿v3.4.5
  • ORM v0.2.18版

我还注意到,如果删除了键入,错误就消失了 : Repository<MyEntity>

"Excessive stack depth comparing types 'FindConditions<?>' and 'FindConditions<?>'同一行上也有错误。

Dan*_*tos -3

这可以通过使用以前版本的 Typescript 来解决。

首先确保工作区“npm”上的 typescript 版本低于3.6. 例如: package.json

"dependencies": {
    ...
    "typescript": "^3.0.3"
}
Run Code Online (Sandbox Code Playgroud)

如果您的工作区有3.6.x或更高版本,请安装以前的版本,输入npm install typescript@3.4.3

然后,打开文件.ts,状态栏上将出现打字稿版本选择器。(可能正在显示的版本^3.6.x

在此输入图像描述

然后选择“使用工作区版本”而不是“VS Code 的版本”

在此输入图像描述

确保工作区版本也低于我的工作区中的3.6.xex 版本。3.4.3或者如前所述强制安装以前的版本

在此输入图像描述

现在已选择该版本,您在 VS Code 或命令^3.4.x上不应出现此类错误。tsc

注意:由于工作区 Typescript 版本与 TypeORM 兼容,因此运行类似的脚本npm run build不应引发任何错误,因为它将使用 Typescript 工作区二进制文件。该错误只会发生在 VS Code 或tsc终端上的直接命令上