【发布时间】:2016-11-10 12:27:54
【问题描述】:
我正在尝试为 Typescript 中的 REST Api 接口开发一个装饰器。这里是装饰器实现
export function RemoteResource(params: any): Function {
console.log("RemoteResource.params: ", params);
return function (target: Function) {
//--POST
target.prototype.post = function () {
console.log("----POST");
};
//--GET
target.prototype.retrieve = function () {
console.log("----GET");
};
//--DELETE
target.prototype.remove = function () {
console.log("----DELETE");
};
//--PULL
target.prototype.update = function () {
console.log("----PULL");
};
console.log("RemoteResource.target: ", target);
return target;
}
}
现在,我可以使用装饰器@RemoteResource,并将方法post|retrieve|remove|update正确添加到原始对象原型中。
@RemoteResource({
path: "/foos",
methods: [],
requireAuth: false
})
export class Foo { }
从这里开始,如果我执行
let tester = new Foo();
tester.post() //--This prints out "----POST" correctly
我的日志打印正确,但我也有以下错误:“属性 'post' 在类型 'Foo' 上不存在。”
虽然我了解为什么会出现此错误(Foo 没有任何声明的 post 属性),但我不确定如何修复它。
理想情况下,我希望 TS 编译器了解装饰器扩展了原始对象并添加了这些方法。
我怎样才能实现它?有什么想法吗?
谢谢!
【问题讨论】:
-
你看到这个库了吗? (github.com/thiagobustamante/typescript-rest)
标签: javascript typescript decorator