我想通过扩展Function原型来标记类方法。
所以我这样做是为了扩展原型:
interface Function {
$flag(): Function
__flagged__: boolean
}
Function.prototype.$flag = function (): Function {
this.__flagged__ = true;
return this;
};
哪种方法很好,但是我无法标记这样的类方法。
class Foo {
bar(): void: {
// Do stuff
}.$flag()
}
当尝试调用.$flag()
方法时,编译器会抛出语法错误,这似乎有点奇怪,因为它会创建有效的JavaScript。
有没有办法去#34;标记"一种方法?
答案 0 :(得分:0)
有没有办法去#34;标记"一种方法?
构造函数内部
constructor(){
this.bar.$flag();
}
这似乎有点奇怪,因为它会创建有效的JavaScript。
只要您在Typescript类中使用"有效的javascript"是不再有效的ecmascript 5。
答案 1 :(得分:0)
您可以使用lambda来达到同样的效果:
interface Function {
$flag(): Function
__flagged__: boolean
}
Function.prototype.$flag = function (): Function {
this.__flagged__ = true;
return this;
};
class Foo {
bar = ((): void => {
// Do stuff
}).$flag()
}
您可以为显示函数的成员变量执行此操作。
但是,您尝试执行的操作无法完成内联,因为它是语法错误。但是你可以在构造函数中做到这一点,如果你真的想要如mpm所示。
答案 2 :(得分:0)
由于您实际上使用ECMAScript 6功能来描述类(使用TypeScript扩展来添加输入),因此您建议的语法有效,实际上无效。你不能声明一个函数,然后以你正在做的方式“标记”它。
其他建议的另一种替代方法是在定义类之后调用函数:
class Foo {
bar() { }
}
Foo.prototype.bar.$flag();
虽然它可能缺乏优雅,但它只为课堂做过一次。诚然,它不如“归属”这个功能那么好。