TypeScript:带有扩展函数原型的标志类方法

时间:2014-05-09 11:51:44

标签: typescript

我想通过扩展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;标记"一种方法?

3 个答案:

答案 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();

虽然它可能缺乏优雅,但它只为课堂做过一次。诚然,它不如“归属”这个功能那么好。