node.js - 使用 typescript 和 mongoose 的静态方法确实是 : "An interface may only extend a class or another interface."

标签 node.js mongodb typescript mongoose

我尝试向我的模型添加静态方法,但如果这样做,我会收到此错误:An interface may only extend a class or another interface.

这是我的代码:

import * as mongoose from 'mongoose';
import {IPermission} from './IPermission';

export interface IRoleDocument extends mongoose.Document {
    name: string,
    inherit_from: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Role'
    },
    permissions: Array<IPermission>
};

export interface IRole extends mongoose.Model<IRoleDocument> {

};

错误来自export interface IRole extends mongoose.Model<IRoleDocument>

问候

最佳答案

据我所知,不可能从 typescript 中的交集/联合类型继承。对于 mongoose 类型定义 mongoose.Model<T>被声明为交集类型:

type ModelConstructor<T> = IModelConstructor<T> & events.EventEmitter;

有关如何在 typescript 中使用 mongoose 的示例,您可以查看此 topic on SA

但是您仍然可以使用交集而不是继承来获取所需的接口(interface),如下所示:

interface IRoleDefinition
{
    myExtraProperty: string;
}

type IRole = mongoose.Model<IRoleDocument> & IRoleDefinition; 

有关交集类型与继承的更多信息:github

关于node.js - 使用 typescript 和 mongoose 的静态方法确实是 : "An interface may only extend a class or another interface.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39059449/

相关文章:

node.js - 如何在 Sequelize 中使用 array_agg()?

node.js - 在没有 GridFS 的 NodeJS 中使用 MongoDB 存储一些小(小于 1MB)文件

node.js - TypeScript 构建错误 TS5023

reactjs - 如何为浏览器编译 typescript

node.js - 在 Firebase Cloud Functions 中仅部署单个非导出函数

node.js - 风 sails JS : Select random records from MongoDB?

mongodb:仅嵌入 id 或同时嵌入 id 和 name

javascript - 如何加快meteor中的mongoDB查询响应时间?

node.js - 如何在 TypeScript(main.ts) Angular 中创建 lowdb?

angularjs - 使用 Loopback-component-passport 将环回中的用户角色设置为内置模型