Typescript Mongoose为VS代码中的架构字段获取IntelliSense或警告

Typescript Mongoose为VS代码中的架构字段获取IntelliSense或警告,typescript,mongoose,visual-studio-code,Typescript,Mongoose,Visual Studio Code,我想为我的猫鼬模型设置一个代码完成 因此,如果我创建一个新模型,我希望看到Mongoose模式中定义的可用字段。编译器也会发出错误/警告,如果不是所有字段都提供,那就好了 简单例子 //define Schema const MyUserSchema = new Schema({ name: String, firstname: String, password: String }) //create Model export const MyUserModel = m

我想为我的猫鼬模型设置一个代码完成

因此,如果我创建一个新模型,我希望看到Mongoose模式中定义的可用字段。编译器也会发出错误/警告,如果不是所有字段都提供,那就好了

简单例子

//define Schema
const MyUserSchema = new Schema({
    name: String,
    firstname: String,
    password: String
})

//create Model
export const MyUserModel = model('user', MyUserSchema)

//instance of MyUserModel
let testUser = new MyUserModel({
    //want IntelliSense for fields here
    name: "Lastname",
    firstname: "Firstname",
    password: "securepassword"
}):
我想我必须使用接口。但我不知道如何使用它们。

不幸的是。因此,您将不会收到缺少字段的编译器错误

也就是说,以下内容将部分满足您的要求:

import { Document, Schema, model } from 'mongoose';

interface User {
    name: String,
    firstname: String,
    password: String
}

interface UserModel extends User, Document { }

const MyUserSchema = new Schema({
    name: String,
    firstname: String,
    password: String,
})

export const MyUserModel = model<UserModel>('user', MyUserSchema)

let testUser = new MyUserModel({
    name: 'foo',
    firstname: 'bar',
    password: 'baz'
});
从“mongoose”导入{Document,Schema,model};
界面用户{
名称:String,
名字:String,
密码:String
}
接口UserModel扩展用户,文档{}
const MyUserSchema=新架构({
名称:String,
名字:String,
密码:String,
})
export const MyUserModel=model('user',MyUserSchema)
让testUser=newmyusermodel({
名称:“foo”,
名字:“酒吧”,
密码:“baz”
});

通过以上设置,当您点入
testUser
时,您将看到智能意义上的
name
firstname
password

因为您使用的是TypeScript和JS环境,所以您可以在d.ts文件中进行一些更改,以便在创建模型时实现自动完成

  • 转到
    node\u modules/@types/mongoose/index.d.ts
  • 查找
    模型的定义
    (@types/mongoose=5.5.34中的2881行)
  • 做些改变
  • new(doc?:any):T;
    

    new(doc?:省略):T;
    

    这并不完全是你所期望的。但是,如果您只想获得intellisense,则有一种变通方法可用。我觉得这是你需要的

    //定义接口
    界面用户{
    名称:字符串;
    名字:字符串;
    密码:字符串;
    }
    接口UserModel扩展了用户mongoose.Document{}
    //定义模式
    const MyUserSchema=new mongoose.Schema({
    名称:String,
    名字:String,
    密码:String,
    });
    //创建模型
    export const MyUserModel=mongoose.model('user',MyUserSchema);
    let输入:部分={
    //把你的智能感知带到这里
    名称:“Lastname”,
    名字:“名字”,
    密码:“securepassword”,
    };
    //MyUserModel的实例
    让testUser=newmyusermodel(输入);
    
    testUser.firstname//在这里获取您的智能感知
    您是对的。有了这些,当我做
    testUser.firstname
    时,我会得到一些建议。这已经帮了大忙了!但是当定义新模型时,我没有得到任何建议。有没有一种方法可以扩展mongoose的模型类或其他一些方法来实现这一点?有没有其他方法可以在不更改mongoose定义文件的情况下做到这一点?只有批准的PullRequest才能访问mongoose的类型定义库