![](/img/trans.png)
[英]Why is TypeScript unable to detect mismatched types at compile time and how to fix it?
[英]How do I fix the Typescript error Unable to compile TypeScript:
我无法弄清楚我收到错误的原因。 我不是 Typescript 忍者,所以对于这里的某个人来说,这个错误可能很明显。 我的项目正在使用 Kubernetes 运行微服务,当我运行项目时,其中一项服务抛出以下错误。
我已经尽可能多地在 Google 上搜索,但没有发现任何帮助。 该错误非常特定于使 mongoose 发挥良好的一些尝试。
提前致谢。
我的 model 文件:
import mongoose from 'mongoose';
import { Order, OrderStatus } from './order';
interface TicketAttrs {
id: string;
price: number;
title: string;
}
export interface TicketDoc extends mongoose.Document {
id: string;
title: string;
price: number;
isReserved(): Promise<boolean>;
}
interface TicketModel extends mongoose.Model<TicketDoc> {
build(attrs: TicketAttrs): TicketDoc;
}
const schema = new mongoose.Schema({
title: {
type: String,
required: true
},
price: {
type: Number,
required: true,
min: 0
}
}, {
toJSON: {
transform(doc, ret) {
ret.id = ret._id;
delete ret._id;
}
}
});
schema.statics.build = (attrs: TicketAttrs) => {
return new Ticket({
_id: attrs.id,
price: attrs.price,
title: attrs.title
});
};
/**
* Queries the orders to determine if a ticket is currently
* reserved.
*
* @returns boolean
*/
schema.methods.isReserved = async function() {
const existingOrder = await Order.findOne({
ticket: this,
status: {
$in: [
OrderStatus.Created,
OrderStatus.AwaitingPayment,
OrderStatus.Complete
]
}
});
return !!existingOrder;
};
const Ticket = mongoose.model<TicketDoc, TicketModel>('Ticket', schema);
export { Ticket };
错误:
[orders] /app/src/models/ticket.ts 中的编译错误 [orders] [ERROR] 11:43:04 ⨯ 无法编译 TypeScript:[orders] src/models/ticket.ts(57,5):错误TS2322:类型 'Document<any, {}>' 不可分配给类型 'Pick<_LeanDocument, "id" | "_id" | "__v" | “标题” | “价格” | "已保留"> | QuerySelector<Pick<_LeanDocument, "id" |... 4 更多... | "已保留">> | 不明确的'。 [订单] 类型 'Document<any, {}>' 缺少来自类型 'Pick<_LeanDocument, "id" | 的以下属性 "_id" | "__v" | “标题” | “价格” | "isReserved">':标题、价格、isReserved [订单]
Schema 是一个通用构造函数,所以试试这个: new mongoose.Schema<TicketDoc>({...})
我从这里提出了这个想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.