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 个 reaction 已指派 1 人 在 GitHub 查看

@rbuckton 已经在做这个了。

开始于 2021年4月6日。

Bug Domain: JS Emit Rescheduled
主要语言
Go
星标
111k
派生
14.4k
平均合并
1 天 19 小时
30 天内合并 PR
117

描述

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. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。