Typescript 我如何使用和不使用参数进行装饰?

Typescript 我如何使用和不使用参数进行装饰?,typescript,Typescript,我想做一个可以使用参数和不使用参数的decorator,例如: @Controller class SomeClass{ } @Controller("some_arg") class AnotherClass{ } 可以这样做吗?根据typescript文档: 如果希望decorator接收参数,那么decorator函数需要返回实际的decorator函数 因此,您需要创建一个处理两种情况的装饰器: 当你没有通过任何东西,它应该作为一个正常的装饰 当你传递一个字符串时

我想做一个可以使用参数和不使用参数的decorator,例如:

@Controller
class SomeClass{
}

@Controller("some_arg")
class AnotherClass{
}

可以这样做吗?

根据typescript文档:

如果希望decorator接收参数,那么decorator函数需要返回实际的decorator函数

因此,您需要创建一个处理两种情况的装饰器:

  • 当你没有通过任何东西,它应该作为一个正常的装饰
  • 当你传递一个字符串时,它应该返回一个新的decorator
  • 您还可以使用“具有类型安全性”

    最后一个例子是:

    function Controller(value: string): <T>(target: T) => T 
    function Controller<T>(target: T): T 
    function Controller<T>(value: string | T): T | ((target: T) => T)  {
      if (typeof value === 'string') {
        return (target: T) => {
          // Value is string, target is class
          return target
        }
      }
      // Value is class
      return value
    }
    
    @Controller
    class SomeClass{}
    
    @Controller("some_arg")
    class AnotherClass{}
    
    功能控制器(值:字符串):(目标:T)=>T
    功能控制器(目标:T):T
    函数控制器(值:字符串| T):T |((目标:T)=>T){
    如果(值的类型=='string'){
    回报率(目标:T)=>{
    //值是字符串,目标是类
    返回目标
    }
    }
    //价值就是阶级
    返回值
    }
    @控制器
    类SomeClass{}
    @控制器(“某些参数”)
    类另一类{}