gpt4 book ai didi

javascript - 突然出现 TypeORM FindConditions 类型错误

转载 作者:行者123 更新时间:2023-12-04 14:03:34 26 4
gpt4 key购买 nike

重新安装 node_modules 后,我的 NestJS 服务中突然出现 FindOneOptions/ObjectID 错误。
几分钟前 build 得很好。
让我想知道,这是代码错误还是打字错误?
使用“@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 有关但我不确定。我希望有人可以帮助我理解这一点。

最佳答案

从错误:

  • 重载 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。有几种方法可以做到这一点,我不会建议采用哪种方法,因为我认为这取决于我不知道的变量。然而,我想到的主要两种方法是
  • 使用monorepo 工具(我得到了相关的点击duck-duck-go-ing “monorepo 工具”)和/或包管理器(工作区模式下的pnpm、npm/yarn)为您系统地解决了这个问题
  • server-common (听起来像是一个支持库)要么是依赖项的唯一包含者(特别是 typeorm),要么将它们列为对等依赖项,以便应用程序包括 server-common获得关于它使用什么类型的发言权。

  • 编辑:
  • 重读后,我也意识到发生了错误After reinstalling node_modules ,因此第三种选择可能是通过严格指定不带 ^ 的依赖项来简单地确保 typeorm 版本的一致。 , ~ , 或 x在每个相关 package.json 中使用完全相同的版本的符号文件。

  • 关于javascript - 突然出现 TypeORM FindConditions 类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69256658/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com