突发 TypeORM FindConditions 类型错误
Sudden TypeORM FindConditions type errors
重新安装后 node_modules 我的 NestJS 服务突然出现 FindOneOptions/ObjectID 错误。
几分钟前就开始建设了。
让我想知道,这是代码错误还是打字错误?
使用“@nestjs/typeorm”:“^7.1.5”
这似乎正在使用 typeorm 0.2.35:
本地安装版本:0.2.35.
全局安装的TypeORM版本:0.2.37.
实际代码
async getOne(id: number, userId?: string, type?: XPType, currentUser?: User) {
const options: FindConditions<XP> = {
id
};
userId && (options.userId = userId);
type && (options.type = type);
const post = await XP.findOne(options); // <-- error
...
这是实际错误:
No overload matches this call.
Overload 1 of 3, '(this: ObjectType<XP>, id?: string | number | Date | ObjectID, options?: FindOneOptions<XP>): Promise<...>', gave the following error.
Argument of type 'FindConditions<XP>' is not assignable to parameter of type 'string | number | Date | ObjectID'.
Type 'FindConditions<XP>' is missing the following properties from type 'ObjectID': generationTime, equals, generate, getTimestamp, toHexString
Overload 2 of 3, '(this: ObjectType<XP>, options?: FindOneOptions<XP>): Promise<XP>', gave the following error.
Type 'FindConditions<XP>' has no properties in common with type 'FindOneOptions<XP>'.
Overload 3 of 3, '(this: ObjectType<XP>, conditions?: FindConditions<XP>, options?: FindOneOptions<XP>): Promise<...>', gave the following error.
Argument of type 'import("/Users/bracicot/dev/dev-server/dev-server/node_modules/typeorm/find-options/FindConditions").FindConditions<import("/Users/bracicot/dev/dev-server/packages/server-common/dist/entities/experience-post.entity").XP>' is not assignable to parameter of type 'import("/Users/bracicot/dev/dev-server/packages/server-common/node_modules/typeorm/find-options/FindConditions").FindConditions<import("/Users/bracicot/dev/dev-server/packages/server-common/dist/entities/experience-post.entity").XP>'.
Types of property 'userId' are incompatible.
Type 'string | import("/Users/bracicot/dev/dev-server/dev-server/node_modules/typeorm/find-options/FindOperator").FindOperator<string>' is not assignable to type 'string | import("/Users/bracicot/dev/dev-server/packages/server-common/node_modules/typeorm/find-options/FindOperator").FindOperator<string>'.
Type 'FindOperator<string>' is not assignable to type 'string | FindOperator<string>'.
Type 'import("/Users/bracicot/dev/dev-server/dev-server/node_modules/typeorm/find-options/FindOperator").FindOperator<string>' is not assignable to type 'import("/Users/bracicot/dev/dev-server/packages/server-common/node_modules/typeorm/find-options/FindOperator").FindOperator<string>'.
Types have separate declarations of a private property '_type'.ts(2769)
const options: FindConditions<XP>
似乎与 4241 有关,但不确定。我希望有人能帮助我理解这一点。
来自错误:
Overload 3 是您正在尝试的,也是应该解决的,因为它是唯一包含 FindConditions
参数的:(this: ObjectType<XP>, conditions?: FindConditions<XP>, options?: FindOneOptions<XP>): Promise<...>
进一步挖掘,有以下差异:
'string | import("/Users/bracicot/dev/dev-server/dev-server/node_modules/typeorm/find-options/FindOperator").FindOperator<string>'
不可分配给类型
'string | import("/Users/bracicot/dev/dev-server/packages/server-common/node_modules/typeorm/find-options/FindOperator").FindOperator<string>
您似乎有两个包裹:
dev-server
server-common
并且这些包括单独的 node_modules/typeorm/find-options/FindOperator
个实例,迫使您的编译器将它们视为不同的类型。这是由最后一个错误声明支持的; Types have separate declarations of a private property '_type'.
.
综上所述,我觉得你应该巩固一下node_modules用过的。有几种方法可以做到这一点,我不会建议采用哪种方法,因为我认为这取决于我不知道的变量。然而,spring 在我看来主要的两种方法是
- 使用 monorepo 工具(我得到了相关的点击 duck-duck-go-ing“monorepo 工具”)and/or 包管理器(pnpm,npm/yarn 在工作区模式下)系统地解决了这个问题你
- 让
server-common
(听起来像支持库)成为依赖项(特别是 typeorm)的唯一包含者,或者将它们列为对等依赖项,以便应用程序包含 server-common
对它使用的类型有发言权。
编辑:
- 重新阅读后,我也意识到发生了错误
After reinstalling node_modules
,所以第三种选择可能是通过严格指定依赖关系而不是[=21]来简单地确保typeorm的版本一致=]、~
或 x
符号在每个相关 package.json
文件中使用完全相同的版本。
重新安装后 node_modules 我的 NestJS 服务突然出现 FindOneOptions/ObjectID 错误。
几分钟前就开始建设了。 让我想知道,这是代码错误还是打字错误?
使用“@nestjs/typeorm”:“^7.1.5”
这似乎正在使用 typeorm 0.2.35:
本地安装版本:0.2.35.
全局安装的TypeORM版本:0.2.37.
实际代码
async getOne(id: number, userId?: string, type?: XPType, currentUser?: User) {
const options: FindConditions<XP> = {
id
};
userId && (options.userId = userId);
type && (options.type = type);
const post = await XP.findOne(options); // <-- error
...
这是实际错误:
No overload matches this call.
Overload 1 of 3, '(this: ObjectType<XP>, id?: string | number | Date | ObjectID, options?: FindOneOptions<XP>): Promise<...>', gave the following error.
Argument of type 'FindConditions<XP>' is not assignable to parameter of type 'string | number | Date | ObjectID'.
Type 'FindConditions<XP>' is missing the following properties from type 'ObjectID': generationTime, equals, generate, getTimestamp, toHexString
Overload 2 of 3, '(this: ObjectType<XP>, options?: FindOneOptions<XP>): Promise<XP>', gave the following error.
Type 'FindConditions<XP>' has no properties in common with type 'FindOneOptions<XP>'.
Overload 3 of 3, '(this: ObjectType<XP>, conditions?: FindConditions<XP>, options?: FindOneOptions<XP>): Promise<...>', gave the following error.
Argument of type 'import("/Users/bracicot/dev/dev-server/dev-server/node_modules/typeorm/find-options/FindConditions").FindConditions<import("/Users/bracicot/dev/dev-server/packages/server-common/dist/entities/experience-post.entity").XP>' is not assignable to parameter of type 'import("/Users/bracicot/dev/dev-server/packages/server-common/node_modules/typeorm/find-options/FindConditions").FindConditions<import("/Users/bracicot/dev/dev-server/packages/server-common/dist/entities/experience-post.entity").XP>'.
Types of property 'userId' are incompatible.
Type 'string | import("/Users/bracicot/dev/dev-server/dev-server/node_modules/typeorm/find-options/FindOperator").FindOperator<string>' is not assignable to type 'string | import("/Users/bracicot/dev/dev-server/packages/server-common/node_modules/typeorm/find-options/FindOperator").FindOperator<string>'.
Type 'FindOperator<string>' is not assignable to type 'string | FindOperator<string>'.
Type 'import("/Users/bracicot/dev/dev-server/dev-server/node_modules/typeorm/find-options/FindOperator").FindOperator<string>' is not assignable to type 'import("/Users/bracicot/dev/dev-server/packages/server-common/node_modules/typeorm/find-options/FindOperator").FindOperator<string>'.
Types have separate declarations of a private property '_type'.ts(2769)
const options: FindConditions<XP>
似乎与 4241 有关,但不确定。我希望有人能帮助我理解这一点。
来自错误:
Overload 3 是您正在尝试的,也是应该解决的,因为它是唯一包含
FindConditions
参数的:(this: ObjectType<XP>, conditions?: FindConditions<XP>, options?: FindOneOptions<XP>): Promise<...>
进一步挖掘,有以下差异:
'string | import("/Users/bracicot/dev/dev-server/dev-server/node_modules/typeorm/find-options/FindOperator").FindOperator<string>'
不可分配给类型
'string | import("/Users/bracicot/dev/dev-server/packages/server-common/node_modules/typeorm/find-options/FindOperator").FindOperator<string>
您似乎有两个包裹:
dev-server
server-common
并且这些包括单独的
node_modules/typeorm/find-options/FindOperator
个实例,迫使您的编译器将它们视为不同的类型。这是由最后一个错误声明支持的;Types have separate declarations of a private property '_type'.
.综上所述,我觉得你应该巩固一下node_modules用过的。有几种方法可以做到这一点,我不会建议采用哪种方法,因为我认为这取决于我不知道的变量。然而,spring 在我看来主要的两种方法是
- 使用 monorepo 工具(我得到了相关的点击 duck-duck-go-ing“monorepo 工具”)and/or 包管理器(pnpm,npm/yarn 在工作区模式下)系统地解决了这个问题你
- 让
server-common
(听起来像支持库)成为依赖项(特别是 typeorm)的唯一包含者,或者将它们列为对等依赖项,以便应用程序包含server-common
对它使用的类型有发言权。
编辑:
- 重新阅读后,我也意识到发生了错误
After reinstalling node_modules
,所以第三种选择可能是通过严格指定依赖关系而不是[=21]来简单地确保typeorm的版本一致=]、~
或x
符号在每个相关package.json
文件中使用完全相同的版本。