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 .
我有以下声明作为更大 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); });
才能与第一个版本等效。
{}
表示编译器希望您在块
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 .