【问题标题】:how to link model with types in mongoose with typescript?如何将模型与猫鼬中的类型与打字稿联系起来?
【发布时间】:2021-11-06 23:31:14
【问题描述】:

我在node.js 中使用mongoosetypescript

我的模型定义 -> album.model.ts

import mongoose from "mongoose";
const { Schema } = mongoose;

interface Album {
  title: string,
  price: Number
}

const schema = new Schema<Album>({
 title: { type: String, required: true },
 price: Schema.Types.Decimal128
});

const albums = mongoose.model("albums", schema);

export default albums;

专辑 API -> 专辑.ts

import express from "express";
import albums from "../../models/albums";

const router = express.Router();

router.get("/api/albums", async (req, res) => {
 
const _albums = await albums.find({}); //line #1

const albums= _albums.map((item) => { //line #2
               return {
                 title: item.get("title").ToUpperCase()
                      }})};

export default router;

但是,我没有像鼠标悬停时那样对 Typescript 进行静态类型检查,我在第 1 行看到 _albums 的类型为 any ,第 2 行的 item 也是如此

虽然我正在寻找 _albums 的数组 AlbumitemAlbum 的实例,以便我可以通过 . 访问属性

_albums.map((item) => { //line #2
                   return {
                     title: item.title.ToUppercase()
                          }})};

我检查的链接。

我怎样才能获得这种静态类型检查/转换?

谢谢!

【问题讨论】:

    标签: node.js typescript mongodb mongoose


    【解决方案1】:

    你能做到吗?

    const albums = mongoose.model("albums", schema<Album>);
    

    如果是这样,您可以制作第三种类型,例如

    interface AlbumDocument implements Album {
      title: string,
      price: Number,
      createdAt: number
      updatedAt: number
      id: string
    }
    

    然后像这样使用它来解决问题

    const albums = mongoose.model("albums", schema<AlbumDocument>);
    

    【讨论】:

      猜你喜欢
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      • 2021-11-11
      • 2018-10-09
      • 2019-11-24
      • 2018-07-15
      • 2021-09-27
      相关资源
      最近更新 更多