自定义装饰器 Typescript Mongoose

Posted

技术标签:

【中文标题】自定义装饰器 Typescript Mongoose【英文标题】:Custom Decorator Typescript Mongoose 【发布时间】:2020-09-04 22:50:44 【问题描述】:

我正在尝试创建一个自定义类装饰器,它创建一个存储库类的实例,下面的 sn-p 代表“装饰器”和“存储库”。

import UserModel,  User  from "../models/user.model";
import AbstractRepository from "./abstract.repository";
import  Document, Model  from 'mongoose'
import  injectable  from "inversify";

export function Repository(service: Document): ClassDecorator 
    return function (target: Function) 

    


@Repository(User)
export class TestRepository 


这个另一个 sn-p 代表我的猫鼬模型

import moongose,  Document, Schema  from 'mongoose'

export interface User extends Document 
    name: String,


const UserSchema = new Schema<User>(
    name: 
        type: String
    ,
)

export default moongose.model<User>("user", UserSchema)

但是当我尝试使用我的自定义装饰器时,打字稿会抱怨一些东西并给出这个错误。

'User' only refers to a type, but is being used as a value here.ts(2693)

有人已经遇到过这个问题,可以帮助我吗?

【问题讨论】:

我遇到了同样的问题,我没有找到解决办法。 【参考方案1】:

装饰器的参数 function Repository(service: Document) 是文档的一个实例 但是你传递了一个类型User

@Repository(User) 应该是@Repository(new UserModel)

或者改变参数的类型

function Repository(service: Model&lt;User&gt;) 然后你可以像这样调用装饰器@Repository(UserModel)

【讨论】:

以上是关于自定义装饰器 Typescript Mongoose的主要内容,如果未能解决你的问题,请参考以下文章

如何在vue.js 2应用程序中全局使用自定义装饰器?

使用带有 Vue 和 TypeScript 类装饰器语法的外部定义组件

TypeScript装饰器

typescript 装饰器

Typescript中的装饰器原理

typeScript 装饰器