deb*_*ton 6 javascript node.js sequelize.js typescript
我将从sequelize 5.xx升级到6.xx 在sequelize v5中一切正常,但是当我升级时,当我想使用包含中的对象时,通过关联生成的所有属性都会出现打字稿错误。我还尝试了https://sequelize.org/master/manual/typescript.html中的示例,但没有成功。
我希望任何人都可以帮助我!
模型: Participant.js
import { Model, DataTypes } from 'sequelize';
import { STATUS } from '@bb/shared-core/dist/constants/participant';
import sequelize from '@bb/db';
import User from '@bb/components/erp/v1/modules/users/models/User';
import OrderItem from '@bb/components/ecommerce/v2/modules/orders/models/OrderItem';
import Contact from '@bb/components/erp/v1/modules/contacts/models/Contact';
import { DeserializedModel } from '../interfaces/Participant';
export class Participant extends Model implements DeserializedModel {
id!: number;
fkUser: number;
fkOrderItem: number;
fkContact: number;
adminNotes: string;
trainerNotes: string;
attendance: string;
status: string;
readonly createdAt: Date;
readonly updatedAt: Date;
}
Participant.init({
fkUser: {
type: DataTypes.NUMBER,
field: 'fk_user'
},
fkOrderItem: {
type: DataTypes.NUMBER,
field: 'fk_order_item'
},
fkContact: {
type: DataTypes.NUMBER,
field: 'fk_contact'
},
trainerNotes: {
type: DataTypes.STRING,
field: 'trainer_notes'
},
adminNotes: {
type: DataTypes.STRING,
field: 'admin_notes'
},
attendance: {
type: DataTypes.ENUM('confirmed', 'unconfirmed'),
field: 'attendance'
},
status: {
type: DataTypes.ENUM(STATUS.REBOOKED, STATUS.CANCELLED, STATUS.PARTICIPATING),
field: 'status',
defaultValue: 'participating'
}
}, {
sequelize,
modelName: 'participant'
});
Participant.belongsTo(User, {
as: 'user',
foreignKey: 'fk_user',
targetKey: 'id'
});
Participant.belongsTo(OrderItem, {
as: 'orderItem',
foreignKey: 'fk_order_item',
targetKey: 'id'
});
OrderItem.hasMany(Participant, {
as: 'participants',
foreignKey: 'fk_order_item',
sourceKey: 'id'
});
Participant.belongsTo(Contact, {
as: 'contact',
foreignKey: 'fk_contact',
targetKey: 'id'
});
if (process.env.NODE_ENV === 'test') {
Participant.sync();
}
export default Participant;
Run Code Online (Sandbox Code Playgroud)
这是使用该模型的函数: ParticipantService.js
private async getEventIdFromParticipant(participantId: number): Promise<number|undefined> {
const participant = await Participant.findOne({
where: {
id: participantId,
},
include: [
{
model: OrderItem,
as: 'orderItem',
}
]
});
return participant?.orderItem?.fkEvent;
}
Run Code Online (Sandbox Code Playgroud)
错误位于ParticipantService.js的return 语句中。
Property 'orderItem' does not exist on type 'Participant'
Run Code Online (Sandbox Code Playgroud)
小智 3
您还需要在类中定义它:
import { Model, DataTypes, BelongsTo } from 'sequelize';
export class Participant extends Model implements DeserializedModel {
id!: number;
fkUser: number;
fkOrderItem: number;
fkContact: number;
adminNotes: string;
trainerNotes: string;
attendance: string;
status: string;
public readonly orderItem?: OrderItem;
public static associations: {
orderItem: BelongsTo<Participant, OrderItem>;
};
readonly createdAt: Date;
readonly updatedAt: Date;
}
Run Code Online (Sandbox Code Playgroud)