在打字稿中具有嵌套属性的猫鼬模式

T00*_*0rk 7 nested mongoose typescript

从打字稿开始,我尝试声明一个 Mongoose 模式,它看起来像这样:

User
{
    name : { type: String, required: true },
    ...
    credentials :
    {
        email : { type : String, required : true },
        password : { type : String, required : true },
    },
    ...
}
Run Code Online (Sandbox Code Playgroud)

我试过这个:

import { Document, Types, Schema, Model, model } from "mongoose";

export interface ICredentials
{
    email?:string,
    password?:string,
}

export interface IUser extends Document
{
    name?:string;
    credentials?:ICredentials;
}

export var UserSchema:Schema = new Schema
({
    name            : { type : String, required : true },
    credentials     : 
    {
        email       : { type : String, required : true },
        password    : { type : String, required : true },
    },
});

export const User:Model<IUser> = model<IUser>("User", UserSchema);
Run Code Online (Sandbox Code Playgroud)

当我想创建一个新用户时的问题似乎工作正常。但它没有凭据。我试过了,U.credentials.email = "test@yopmail.com"但它不起作用。我怎么能做到呢?我很确定我需要声明一个实现 ICredentials 的类,但我不熟悉打字稿。

Tro*_*ron 0

我最近遇到了类似的问题,这是我解决的方法;我只是添加了一个类型断言..

U.credentials!.email = "test@yopmail.com"
Run Code Online (Sandbox Code Playgroud)