Mongoose填充上的Typescript接口

kxkpmulp  于 2022-12-14  发布在  TypeScript
关注(0)|答案(2)|浏览(96)

所以我有这个 Mongoose 模型如下:

const userSchema: mongoose.Schema = new mongoose.Schema(
    {
        _id: String,
        email: {
            type: String,
            required: true,
        },
        firstName: String,
        lastName: String,       
        phoneNumber: String,
        cmt: {
            type: String,
            ref: 'Cmt',
        },      
    },  
);

如您所见,cmt字段指向另一个名为Cmt的模型,我将使用其详细信息populate
现在,在另一个示例中,我需要传入cmtid,以便将其与userSchema链接
但那时我会得到一个"Type 'string' is not assignable to type 'ICmt'."的打字错误
ICmt是Cmt的接口定义。
下面给出了userschema接口。

export interface IUser {
    _id: string;
    email: string;
    firstName: string;
    lastName: string;
    phoneNumber: string;
    cmt: ICmt;
    createdAt?: Date;
    updatedAt?: Date;
}

如何在不影响填充查询和创建查询的情况下修复此错误?

2wnc66cl

2wnc66cl1#

这是一个简单的解决方案,在我这边是错误的。
您可以在接口上使用|(or)语句,这将解决可能发生的tslint错误问题
所以我的用户界面将变成

export interface IUser {
    _id: string;
    email: string;
    firstName: string;
    lastName: string;
    phoneNumber: string;
    cmt: ICmt | string;
    createdAt?: Date;
    updatedAt?: Date;
}

所以不会再有我需要担心的tslint错误或tsignore

cvxl0en2

cvxl0en22#

我认为在这种情况下正确的声明应该是,

export interface User {  // Issue when using I in declarations v.6++
  cmt: Cmt | mongoose.Types.ObjectID;
}

相关问题