在服务 NestJS 中使用时 DTO 不工作

发布于 2025-01-09 06:38:06 字数 739 浏览 1 评论 0原文

我有一个像 DTO

export class CreatePlotDTO {
  @IsNumber()
  @ApiProperty()
  @IsOptional()
  area: number;

  @IsNumber()
  @ApiProperty()
  @IsOptional()
  ownerID: number;

}

和一个创建方法 更新:这是在plotService中并接受上面的dto

async createPlot(plot: CreatePlotDTO) {
  return this.plotModel.create(plot)
}

这已经工作了最长的时间,但现在因这个错误而失败

Argument of type 'CreatePlotDTO' is not assignable to parameter of type 'CreationAttributes<Plot>'.
      Type 'CreatePlotDTO' is not assignable to type 'Omit<any, string>'.
        Index signature is missing in type 'CreatePlotDTO'.

我怀疑问题出在“sequelize”:“^ 6.16.2”或“sequelize-typescript” :“^2.1.3”。 有什么想法可以解决这个问题吗?

I have a DTO like

export class CreatePlotDTO {
  @IsNumber()
  @ApiProperty()
  @IsOptional()
  area: number;

  @IsNumber()
  @ApiProperty()
  @IsOptional()
  ownerID: number;

}

and a create method
UPDATE: this is in the plotService and accepting the dto above

async createPlot(plot: CreatePlotDTO) {
  return this.plotModel.create(plot)
}

This has been working for the longest time but now is failing with this error

Argument of type 'CreatePlotDTO' is not assignable to parameter of type 'CreationAttributes<Plot>'.
      Type 'CreatePlotDTO' is not assignable to type 'Omit<any, string>'.
        Index signature is missing in type 'CreatePlotDTO'.

I suspect the issue is with either "sequelize": "^6.16.2" or "sequelize-typescript": "^2.1.3".
Any ideas to resolve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泛滥成性 2025-01-16 06:38:06

同样的版本也发生在我身上(“sequelize”:“^ 6.16.2”或“sequelize-typescript”:“^ 2.1.3”)。我怀疑这两者之一出了问题,但作为一种解决方法,我做了如下操作:

  1. 像这样定义您的模型:(
@Table
export class Plot extends Model<Plot> {
    ...
}

注意 部分)。

  1. 将您的 DTO 实例转换为实际模型类型:(
async createPlot(plot: CreatePlotDTO) {
    return this.plotModel.create(plot as Plot)
}

注意 as Plot 部分)。

It was happening to me also with the same versions ("sequelize": "^6.16.2" or "sequelize-typescript": "^2.1.3"). I suspect there's something going on with one of those two, but as a workaround, I did something like the following:

  1. Define your model like this:
@Table
export class Plot extends Model<Plot> {
    ...
}

(notice the <Plot> part).

  1. Cast your DTO instance into the actual model type:
async createPlot(plot: CreatePlotDTO) {
    return this.plotModel.create(plot as Plot)
}

(notice the as Plot part).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文