microsoft / microsoft/TypeScript

Array destructuring is transpiled with `__read` helper even when asking for no transpilation and no inline helper functions.

オープン
#43,541 コメント 11 件 リアクション 0 件 担当者 1 名 GitHub で見る

@rbuckton がすでに取り組んでいます。

2021年4月6日 から。

Bug Domain: JS Emit Rescheduled
主要言語
Go
スター
111k
フォーク
14.3k
平均マージ
2日 4時間
マージ済み PR(30日)
132

説明

Bug Report

🔎 Search Terms

array destructuring
downLevelIteration
importHelpers
ESNEXT
CommonJS

🕗 Version & Regression Information
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about importHelpers
⏯ Playground Link

Playground link with relevant code

Note: I'm not sure how to reliably get the target option to encode into the URL; you may need to set the target manually to ESNext (or any other value >= ES2015)

💻 Code
declare function foo(): any;

export const [A, V] = foo();
🙁 Actual behavior

The __read transpilation helper was injected into the output JS, even though I specified that I didn't want transpilation (through target=ESNEXT). Additionally, the transpilation helper was injected inline even though I specified the importHelpers=true option.

"use strict";
var __read = (this && this.__read) || function (o, n) {
    var m = typeof Symbol === "function" && o[Symbol.iterator];
    if (!m) return o;
    var i = m.call(o), r, ar = [], e;
    try {
        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
    }
    catch (error) { e = { error: error }; }
    finally {
        try {
            if (r && !r.done && (m = i["return"])) m.call(i);
        }
        finally { if (e) throw e.error; }
    }
    return ar;
};
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.V = exports.A = void 0;
_a = __read(foo(), 2), exports.A = _a[0], exports.V = _a[1];
🙂 Expected behavior

I was expecting output that leveraged the target=ESNEXT setting to include the array destructuring in the output code, like:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.V = exports.A = void 0;
const [A, V] = foo();
exports.A = A;
exports.V = V;

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。