Лямбда в Typescript ведет себя странно - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть следующий оператор как часть большего класса:

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

, который компилируется (с помощью команды ts c) в:

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

Okay all выглядит хорошо ... Но почему тогда:

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

компилируется в:

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

На самом деле у меня возникли проблемы в проекте, где первый способ написания был в порядке, но второй заставил веб-страницу ломаться разными способами (я использую Angular) ... Я всегда думал, что это было точно так же ..

Это из моего tsconfig:

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

Ответы [ 3 ]

1 голос
/ 27 февраля 2020

Если ваше лямбда-тело не заключено в фигурные скобки, то тело рассматривается как выражение, значение которого должно быть возвращено, поэтому TypeScript добавляет ключевое слово return. Если лямбда-тело заключено в фигурные скобки, то тело рассматривается как выполняемый блок операторов, и вы несете ответственность за включение любого необходимого ключевого слова return.

0 голосов
/ 27 февраля 2020

{} означает, что компилятор ожидает, что внутри блока будет оператор 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 .

0 голосов
/ 27 февраля 2020

Первая версия, функции со стрелками в одну строку, имеет неявный возврат, поскольку вы не используете { и } вокруг тела функции.

Поэтому вторая версия должна быть array.map(seq => { return this.mFunction(seq); }); быть эквивалентным первому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...