Skip to content

rest args are busted #12956

Closed
Closed

Description

Using the latest master, this seems to be a pretty serious regression. I noticed my site broke, and tracked it down to an object rest regression.

Basically this code:

let arg = {a: true, b: "test", c: 42};

let fn = ({a, ...rest}) => {
    console.log(`a is: ${JSON.stringify(a)}`);
    console.log(`rest is ${JSON.stringify(rest)}`);
}

fn(arg);

Is generating this emit:

var __rest = (this && this.__rest) || function (s, e) {
    var t = {};
    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && !e.indexOf(p))
        t[p] = s[p];
    return t;
};
var arg = { a: true, b: "test", c: 42 };
var fn = function (_a) {
    var a = _a.a, rest = __rest(_a, ["a"]);
    console.log("a is: " + JSON.stringify(a));
    console.log("rest is " + JSON.stringify(rest));
};
fn(arg);

Which produces this output

a is: true
rest is {"a":true}

The issue is with !e.indexOf(p), as this only returns "true" for the property which is the first in the list (i.e. the index is 0). It should probably be e.indexOf(p) < 0.

CC Mohamed Hegazy (@mhegazy) Ron Buckton (@rbuckton)

Activity

  1. billti commented on Dec 15, 2016

    @billti
    MemberAuthor

    Actually, looks like this was fixed a couple weeks back, but the LKG is out of date. I'll update that.

  2. billti commented on Dec 15, 2016

    @billti
    MemberAuthor

    Updated the LKG which resolved this.

  3. locked and limited conversation to collaborators on Jun 19, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

BugA bug in TypeScript

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions