【问题标题】:How to make mongoose data typesafe in typescript?如何在打字稿中使猫鼬数据类型安全?
【发布时间】:2019-11-28 15:00:10
【问题描述】:

我的模型/order.ts:

import mongoose from './db'
import { ICard } from './cards'


export interface IOrder extends mongoose.Document {
    cardID: ICard['_id'];
    paid: boolean;
    name: string;
    street: string;
};

export const OrderSchema = new mongoose.Schema({
    cardID: { type: mongoose.Schema.Types.ObjectId, required: true },
    paid: { type: Boolean, required: true },
    name: { type: String, required: true },
    street: { type: String, required: true },
})


const Order = mongoose.model<IOrder>('Order', OrderSchema);
export default Order;

现在在我的控制器/orderController.ts 中,应该对 orderData 进行类型检查,但不是:

import Order, { IOrder } from '../model/orders';
let orderData:IOrder =  new Order({
    cardID: 33,
    paid: "I don't care, I am not a boolean",
    name: 33333,
    city: "I am new, not defined in IOrder" //street missing here
});

我尝试的是这个,但这有点开销;我介绍“IOrderType”并将它们连接在一起:

import mongoose from './db'
 import { ICard } from './cards'

export interface IOrder extends mongoose.Document, IOrderType {
}; // wireup

export interface IOrderType { //new IOrderType
        cardID: String;
        paid: Boolean;
        name: String;
        street: String;
}

    export interface IOrder extends mongoose.Document {
        cardID: ICard['_id'];
        paid: boolean;
        name: string;
        street: string;
    };

    export const OrderSchema = new mongoose.Schema({
        cardID: { type: mongoose.Schema.Types.ObjectId, required: true },
        paid: { type: Boolean, required: true },
        name: { type: String, required: true },
        street: { type: String, required: true },
    })


    const Order = mongoose.model<IOrder>('Order', OrderSchema);
    export default Order;

在此之后我的数据得到验证...这是正确的方法吗?

【问题讨论】:

    标签: typescript mongoose


    【解决方案1】:

    这个库typegoose 可以帮助输入猫鼬数据。但我更喜欢像您在您提出的解决方案中所做的那样为类型声明我自己的接口

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 2017-01-20
      • 2018-10-09
      • 2016-02-05
      • 2021-11-11
      • 2021-06-25
      • 2014-02-15
      相关资源
      最近更新 更多