打字稿装饰器和箭头功能

时间:2015-09-16 09:45:38

标签: typescript typescript1.5

我试图按如下方式实现Typescript方法装饰器。

function dataMethod(name: string, options: any) {        
    return (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<any>) => {        

    }
}

其用法如下。

class HelloWidgetExtesion {         
    @dataMethod("getData", {})
    public getData(name: any, cb: any) {
        cb(null, "");
    }
}

但是我试图弄清楚如何使用带有箭头功能的装饰器,如下所示。

class HelloWidgetExtesion {         
    @dataMethod("getData", {})
    public getData = (name: any, cb: any) => {
       cb(null, "Greetings from Loopback!");
    }
}

但是上面的实现在编译时显示以下错误。

  

错误TS2322:输入&#39;(target:any,propertyKey:string,descriptor:   TypedPropertyDescriptor)=&gt;空隙&#39;不能分配给类型   &#39;(target:Object,propertyKey:string | symbol)=&gt;空隙&#39;

Demo of the issues.

1 个答案:

答案 0 :(得分:3)

在最后一种情况下,字段int[] items = Console.ReadLine().Split().Select(int.Parse).ToArray(); int sum = items.Sum(); 被编译器视为属性(非纯方法)。 这意味着getData参数不会在编译的javascript文件中传递。

您需要的只是修改装饰器并使descriptor字段可选。考虑这个例子:

descriptor

我修改了您的示例here

祝你好运

相关资源(感谢@David Sherret)

  1. Decorators signature