【问题标题】:Lambda in Typescript behaving weirdTypescript 中的 Lambda 行为怪异
【发布时间】:2020-06-11 15:37:29
【问题描述】:

作为更大课程的一部分,我有以下声明:

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"

【问题讨论】:

  • 因为箭头函数是这样定义的。在 JS 中,这与 Typescript 编译器无关。

标签: javascript node.js typescript ecmascript-5


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    所以第二个版本需要array.map(seq => { return this.mFunction(seq); }); 与第一个等价。

    【讨论】:

      【解决方案3】:

      {} 表示编译器希望您在块内有一个 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 .
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-23
        • 2013-11-15
        • 2021-12-02
        • 1970-01-01
        • 2023-03-16
        • 2020-03-03
        • 2021-08-29
        • 2015-06-18
        相关资源
        最近更新 更多