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

时间:2019-09-05 12:43:33

标签: typescript typescript-typings typeorm

在更新到VSCode August 2019 (version 1.38) and Typescript 3.6后,我在TypeORM存储库初始化中得到了很多Type instantiation is excessively deep and possibly infinite.ts(2589)

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
    }
}

如何忽略或修复它们?

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

我还注意到,如果删除打字: Repository<MyEntity>

,该错误消失了。

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

3 个答案:

答案 0 :(得分:1)

更新(2019年9月23日):

此问题似乎已在Typescript版本3.6.3中得到解决。

来源:https://github.com/typeorm/typeorm/issues/3194#issuecomment-529911310

答案 1 :(得分:-1)

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

首先请确保工作区“ npm”上的打字稿版本低于3.6。例如:package.json

"dependencies": {
    ...
    "typescript": "^3.0.3"
}

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

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

enter image description here

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

enter image description here

请确保工作空间版本也低于3.6.x,例如我的工作空间上的版本3.4.3。否则强制安装先前提到的先前版本

enter image description here

现在选择了版本^3.4.x,在VS Code和tsc命令上都不会出现这种错误。

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

答案 2 :(得分:-1)

虽然使用较早版本的打字稿可以完成这项工作,但您也可以按照here的说明,在skipLibCheck: true文件中添加tsconfig.json条目

{
  "compilerOptions": {
    ...
    "skipLibCheck": true,
    ...
  }
}