将对象传递给 create 时出现 sequelize-typescript 错误

问题描述 投票:0回答:3

使用时

sequelize-typescript npm
当尝试调用
Street.create(obj)
时,我收到错误:

“plainObject”类型的参数不可分配给类型的参数 “可选”。 输入“普通对象” 类型“Omit”缺少以下属性:sequelize、destroy、restore、update、 还有 39 个

这是模型:

import { Table, Model, Column, PrimaryKey } from 'sequelize-typescript';


@Table({ timestamps: false, tableName: 'street' })
class Street extends Model<Street> {
    @PrimaryKey
    @Column
    street_id: string;

    @Column
    location_id: string;

    @Column
    location_symbol: string;

    @Column
    street_name: string;

    @Column
    street_synonym: string;

    @Column
    street_symbol: string;

    @Column
    updated: Date;
}

export default Street;

这是电话

 Street.create({
                location_id: 'string',
                location_symbol: 'string',
                street_name: 'string',
                street_synonym: 'string',
                street_id: 'string',
                street_symbol: 'string',
                updated: new Date(),
            });
typescript sequelize.js sequelize-typescript
3个回答
7
投票

我猜你正在使用sequelize v6。

只需删除通用的

<Street>
就可以了。你不再需要它了。

import { Table, Model, Column, PrimaryKey } from 'sequelize-typescript';


@Table({ timestamps: false, tableName: 'street' })
class Street extends Model {
    @PrimaryKey
    @Column
    street_id: string;

    @Column
    location_id: string;

    @Column
    location_symbol: string;

    @Column
    street_name: string;

    @Column
    street_synonym: string;

    @Column
    street_symbol: string;

    @Column
    updated: Date;
}

export default Street;

2
投票

您应该能够创建模型使用的界面

F.x.:

import { Table, Model, Column, PrimaryKey } from 'sequelize-typescript';

interface IStreet {
    street_id: string;
    location_id: string;
    location_symbol: string;
    street_name: string;
    street_synonym: string;
    street_symbol: string;
    updated: Date;
}

@Table({ timestamps: false, tableName: 'street' })
class Street extends Model<IStreet> {
    @PrimaryKey
    @Column
    street_id: string;

    @Column
    location_id: string;

    @Column
    location_symbol: string;

    @Column
    street_name: string;

    @Column
    street_synonym: string;

    @Column
    street_symbol: string;

    @Column
    updated: Date;
}

Street.create({
    location_id: 'string',
    location_symbol: 'string',
    street_name: 'string',
    street_synonym: 'string',
    street_id: 'string',
    street_symbol: 'string',
    updated: new Date(),
});

0
投票

第一个答案删除了创建调用的类型安全性,第二个答案添加了重复的类型。这解决了这两个问题

import { PrimaryKey } from 'sequelize-typescript'

@Table({ timestamps: false, tableName: 'street' })
class Street extends Model<
  InferAttributes<Street>,
  InferCreationAttributes<Street>
> {
  @PrimaryKey
  @Column
  street_id: string

  @Column
  location_id: string

  @Column
  location_symbol: string

  @Column
  street_name: string

  @Column
  street_synonym: string

  @Column
  street_symbol: string

  @Column
  updated: Date
}

export default Street
© www.soinside.com 2019 - 2024. All rights reserved.