Typescript Mongoose få IntelliSense eller varningar för schemafält i VS Code
Jag vill ställa in en kodkomplettering för mina Mongoose-modeller.
Så om jag skapar en ny modell skulle jag vilja se de tillgängliga fälten som är definierade i mitt Mongoose-schema. Även fel/varningar från kompilatorn, att inte alla fält tillhandahålls, skulle vara bra
Enkelt exempel
//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"
}):
Jag tror att jag på något sätt måste använda gränssnitt. Men jag kan inte lista ut hur man använder dem.
Svar #1
Eftersom du använder TypeScript och JS-miljö, har du möjlighet att göra vissa ändringar i d.ts-filer för att uppnå autokomplettering när du skapar modell.
- Gå till
node_modules/@types/mongoose/index.d.ts - Hitta definitionen av
Model(rad 2881 i @types/mongoose=5.5.34) - Gör några ändringar
från
new(doc?: any): T;
till
new(doc?: Omit<T, keyof Document>): T;
Svar #2
Tyvärr accepterar Mongoose Model-typen any i sin konstruktor. Som ett resultat kommer du inte att få kompilatorfel för saknade fält.
Det sagt, kommer följande att uppnå en del av det du behöver:
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'
});
Med ovanstående inställning, när du punkterar in i testUser kommer du att se name, firstname och password i intellisense.
