如何用打字稿中的函数和数据创建一个对象?

时间:2014-08-29 06:18:19

标签: javascript node.js typescript

我正在创建一个对象(一个虚拟的http响应对象),如下所示:

res = {
    body : '',
    write : (text : string) => {
        this.body = this.body + text;
    },
    end : () => {}
};

但是打字稿编译器给出了错误:

  

错误TS2108:'这个'不能在模块体内引用。

我知道在javascript中这是可能的(在对象中有this),如何在打字稿中完成此操作?

2 个答案:

答案 0 :(得分:2)

您可以通过将箭头函数write更改为标准函数来完成它,然后它将通常在纯JavaScript中工作。

res = {
    body : '',
    write : function(text: string) {
        this.body = this.body + text;
    },
    end : () => {}
};

这是因为箭头功能如何改变this在其中的工作方式。这是很好的描述here

  

标准函数(即使用函数关键字编写)将会   根据执行上下文动态绑定此(就像在   另一方面,JavaScript),箭头功能保留   附上背景。这是一个有意识的设计决定,如箭头   ECMAScript 6中的函数旨在解决一些问题   与动态绑定相关联(例如,使用函数调用)   图案)。

答案 1 :(得分:0)

在大卫提交(正确)答案之前,我设法找到了解决办法。它没有回答我自己的问题,但这是一个可能的解决方案。

创建class Response

class Response {
    body : string;
    constructor() {
        this.body = '';
    }
    write(text : string) {
        this.body = this.body + text;
    }
    end() {}
}

然后将res设为Response类型的对象:

res = new Response();