Typescript 中的 Lambda 表现得很奇怪

Lambda in Typescript behaving weird

我有以下声明作为更大 class 的一部分:

array.map(seq => this.mFunction(seq));

这编译(在 tsc 命令的帮助下)为:

array.map(function (seq) { return _this.mFunction(seq); });

好的,一切看起来都不错... 但为什么会这样:

array.map(seq => { this.mFunction(seq); });

编译成:

array.map(function (seq) { _this.mFunction(seq); });

我在一个项目中遇到了问题,第一种写法没问题,但第二种写法让网页在很多方面崩溃(我正在使用 Angular)... 我一直以为那些完全一样..

这是我的 tsconfig:

"module": "es2015",
"moduleResolution": "node",
"target": "es5"

如果您的 lambda 主体未包含在大括号中,那么主体将被视为要返回其值的表达式,因此 TypeScript 添加了一个 return 关键字。如果 lambda 主体用大括号括起来,那么主体将被视为要执行的语句块,您有责任包含任何必要的 return 关键字。

第一个版本,单行箭头函数,有一个隐含的 return,因为你没有在函数体周围使用 {}

因此第二个版本需要 array.map(seq => { return this.mFunction(seq); }); 才能与第一个版本等效。

{} 表示编译器希望您在块

中有一个 return 语句
array.map(seq => this.mFunction(seq)); 
// implecit return . 
// the compiler adds return by default if there is no {} and one statement is present ... so here return is added
array.map(seq => { this.mFunction(seq); });
// the compiler expects you to have return statement by yourself 
// so compiler is not adding return statement .