Ensure transformFlags are correct before visiting a node.
This commit is contained in:
parent
702efd559b
commit
cbec19afd7
5 changed files with 257 additions and 71 deletions
|
@ -553,6 +553,7 @@ namespace ts {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
aggregateTransformFlags(node);
|
||||||
const visited = visitor(node);
|
const visited = visitor(node);
|
||||||
if (visited === node) {
|
if (visited === node) {
|
||||||
return node;
|
return node;
|
||||||
|
@ -621,6 +622,7 @@ namespace ts {
|
||||||
// Visit each original node.
|
// Visit each original node.
|
||||||
for (let i = 0; i < count; i++) {
|
for (let i = 0; i < count; i++) {
|
||||||
const node = nodes[i + start];
|
const node = nodes[i + start];
|
||||||
|
aggregateTransformFlags(node);
|
||||||
const visited = node !== undefined ? visitor(node) : undefined;
|
const visited = node !== undefined ? visitor(node) : undefined;
|
||||||
if (updated !== undefined || visited === undefined || visited !== node) {
|
if (updated !== undefined || visited === undefined || visited !== node) {
|
||||||
if (updated === undefined) {
|
if (updated === undefined) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
//// [callWithSpread.ts]
|
//// [callWithSpread.ts]
|
||||||
interface X {
|
interface X {
|
||||||
foo(x: number, y: number, ...z: string[]);
|
foo(x: number, y: number, ...z: string[]): X;
|
||||||
}
|
}
|
||||||
|
|
||||||
function foo(x: number, y: number, ...z: string[]) {
|
function foo(x: number, y: number, ...z: string[]) {
|
||||||
|
@ -19,10 +19,18 @@ obj.foo(1, 2, "abc");
|
||||||
obj.foo(1, 2, ...a);
|
obj.foo(1, 2, ...a);
|
||||||
obj.foo(1, 2, ...a, "abc");
|
obj.foo(1, 2, ...a, "abc");
|
||||||
|
|
||||||
|
obj.foo(1, 2, ...a).foo(1, 2, "abc");
|
||||||
|
obj.foo(1, 2, ...a).foo(1, 2, ...a);
|
||||||
|
obj.foo(1, 2, ...a).foo(1, 2, ...a, "abc");
|
||||||
|
|
||||||
(obj.foo)(1, 2, "abc");
|
(obj.foo)(1, 2, "abc");
|
||||||
(obj.foo)(1, 2, ...a);
|
(obj.foo)(1, 2, ...a);
|
||||||
(obj.foo)(1, 2, ...a, "abc");
|
(obj.foo)(1, 2, ...a, "abc");
|
||||||
|
|
||||||
|
((obj.foo)(1, 2, ...a).foo)(1, 2, "abc");
|
||||||
|
((obj.foo)(1, 2, ...a).foo)(1, 2, ...a);
|
||||||
|
((obj.foo)(1, 2, ...a).foo)(1, 2, ...a, "abc");
|
||||||
|
|
||||||
xa[1].foo(1, 2, "abc");
|
xa[1].foo(1, 2, "abc");
|
||||||
xa[1].foo(1, 2, ...a);
|
xa[1].foo(1, 2, ...a);
|
||||||
xa[1].foo(1, 2, ...a, "abc");
|
xa[1].foo(1, 2, ...a, "abc");
|
||||||
|
@ -72,13 +80,19 @@ foo.apply(void 0, [1, 2].concat(a, ["abc"]));
|
||||||
obj.foo(1, 2, "abc");
|
obj.foo(1, 2, "abc");
|
||||||
obj.foo.apply(obj, [1, 2].concat(a));
|
obj.foo.apply(obj, [1, 2].concat(a));
|
||||||
obj.foo.apply(obj, [1, 2].concat(a, ["abc"]));
|
obj.foo.apply(obj, [1, 2].concat(a, ["abc"]));
|
||||||
|
obj.foo.apply(obj, [1, 2].concat(a)).foo(1, 2, "abc");
|
||||||
|
(_a = obj.foo.apply(obj, [1, 2].concat(a))).foo.apply(_a, [1, 2].concat(a));
|
||||||
|
(_b = obj.foo.apply(obj, [1, 2].concat(a))).foo.apply(_b, [1, 2].concat(a, ["abc"]));
|
||||||
(obj.foo)(1, 2, "abc");
|
(obj.foo)(1, 2, "abc");
|
||||||
obj.foo.apply(obj, [1, 2].concat(a));
|
obj.foo.apply(obj, [1, 2].concat(a));
|
||||||
obj.foo.apply(obj, [1, 2].concat(a, ["abc"]));
|
obj.foo.apply(obj, [1, 2].concat(a, ["abc"]));
|
||||||
|
(obj.foo.apply(obj, [1, 2].concat(a)).foo)(1, 2, "abc");
|
||||||
|
(_c = obj.foo.apply(obj, [1, 2].concat(a))).foo.apply(_c, [1, 2].concat(a));
|
||||||
|
(_d = obj.foo.apply(obj, [1, 2].concat(a))).foo.apply(_d, [1, 2].concat(a, ["abc"]));
|
||||||
xa[1].foo(1, 2, "abc");
|
xa[1].foo(1, 2, "abc");
|
||||||
(_a = xa[1]).foo.apply(_a, [1, 2].concat(a));
|
(_e = xa[1]).foo.apply(_e, [1, 2].concat(a));
|
||||||
(_b = xa[1]).foo.apply(_b, [1, 2].concat(a, ["abc"]));
|
(_f = xa[1]).foo.apply(_f, [1, 2].concat(a, ["abc"]));
|
||||||
(_c = xa[1]).foo.apply(_c, [1, 2, "abc"]);
|
(_g = xa[1]).foo.apply(_g, [1, 2, "abc"]);
|
||||||
var C = (function () {
|
var C = (function () {
|
||||||
function C(x, y) {
|
function C(x, y) {
|
||||||
var z = [];
|
var z = [];
|
||||||
|
@ -109,4 +123,4 @@ var D = (function (_super) {
|
||||||
};
|
};
|
||||||
return D;
|
return D;
|
||||||
}(C));
|
}(C));
|
||||||
var _a, _b, _c;
|
var _a, _b, _c, _d, _e, _f, _g;
|
||||||
|
|
|
@ -2,11 +2,12 @@
|
||||||
interface X {
|
interface X {
|
||||||
>X : Symbol(X, Decl(callWithSpread.ts, 0, 0))
|
>X : Symbol(X, Decl(callWithSpread.ts, 0, 0))
|
||||||
|
|
||||||
foo(x: number, y: number, ...z: string[]);
|
foo(x: number, y: number, ...z: string[]): X;
|
||||||
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
>x : Symbol(x, Decl(callWithSpread.ts, 1, 8))
|
>x : Symbol(x, Decl(callWithSpread.ts, 1, 8))
|
||||||
>y : Symbol(y, Decl(callWithSpread.ts, 1, 18))
|
>y : Symbol(y, Decl(callWithSpread.ts, 1, 18))
|
||||||
>z : Symbol(z, Decl(callWithSpread.ts, 1, 29))
|
>z : Symbol(z, Decl(callWithSpread.ts, 1, 29))
|
||||||
|
>X : Symbol(X, Decl(callWithSpread.ts, 0, 0))
|
||||||
}
|
}
|
||||||
|
|
||||||
function foo(x: number, y: number, ...z: string[]) {
|
function foo(x: number, y: number, ...z: string[]) {
|
||||||
|
@ -58,6 +59,32 @@ obj.foo(1, 2, ...a, "abc");
|
||||||
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
||||||
|
|
||||||
|
obj.foo(1, 2, ...a).foo(1, 2, "abc");
|
||||||
|
>obj.foo(1, 2, ...a).foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>obj.foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>obj : Symbol(obj, Decl(callWithSpread.ts, 9, 3))
|
||||||
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
||||||
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
|
||||||
|
obj.foo(1, 2, ...a).foo(1, 2, ...a);
|
||||||
|
>obj.foo(1, 2, ...a).foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>obj.foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>obj : Symbol(obj, Decl(callWithSpread.ts, 9, 3))
|
||||||
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
||||||
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
||||||
|
|
||||||
|
obj.foo(1, 2, ...a).foo(1, 2, ...a, "abc");
|
||||||
|
>obj.foo(1, 2, ...a).foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>obj.foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>obj : Symbol(obj, Decl(callWithSpread.ts, 9, 3))
|
||||||
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
||||||
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
||||||
|
|
||||||
(obj.foo)(1, 2, "abc");
|
(obj.foo)(1, 2, "abc");
|
||||||
>obj.foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
>obj.foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
>obj : Symbol(obj, Decl(callWithSpread.ts, 9, 3))
|
>obj : Symbol(obj, Decl(callWithSpread.ts, 9, 3))
|
||||||
|
@ -75,6 +102,32 @@ obj.foo(1, 2, ...a, "abc");
|
||||||
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
||||||
|
|
||||||
|
((obj.foo)(1, 2, ...a).foo)(1, 2, "abc");
|
||||||
|
>(obj.foo)(1, 2, ...a).foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>obj.foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>obj : Symbol(obj, Decl(callWithSpread.ts, 9, 3))
|
||||||
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
||||||
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
|
||||||
|
((obj.foo)(1, 2, ...a).foo)(1, 2, ...a);
|
||||||
|
>(obj.foo)(1, 2, ...a).foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>obj.foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>obj : Symbol(obj, Decl(callWithSpread.ts, 9, 3))
|
||||||
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
||||||
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
||||||
|
|
||||||
|
((obj.foo)(1, 2, ...a).foo)(1, 2, ...a, "abc");
|
||||||
|
>(obj.foo)(1, 2, ...a).foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>obj.foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>obj : Symbol(obj, Decl(callWithSpread.ts, 9, 3))
|
||||||
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
||||||
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
||||||
|
|
||||||
xa[1].foo(1, 2, "abc");
|
xa[1].foo(1, 2, "abc");
|
||||||
>xa[1].foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
>xa[1].foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
>xa : Symbol(xa, Decl(callWithSpread.ts, 10, 3))
|
>xa : Symbol(xa, Decl(callWithSpread.ts, 10, 3))
|
||||||
|
@ -99,60 +152,60 @@ xa[1].foo(1, 2, ...a, "abc");
|
||||||
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
>foo : Symbol(X.foo, Decl(callWithSpread.ts, 0, 13))
|
||||||
|
|
||||||
class C {
|
class C {
|
||||||
>C : Symbol(C, Decl(callWithSpread.ts, 28, 40))
|
>C : Symbol(C, Decl(callWithSpread.ts, 36, 40))
|
||||||
|
|
||||||
constructor(x: number, y: number, ...z: string[]) {
|
constructor(x: number, y: number, ...z: string[]) {
|
||||||
>x : Symbol(x, Decl(callWithSpread.ts, 31, 16))
|
>x : Symbol(x, Decl(callWithSpread.ts, 39, 16))
|
||||||
>y : Symbol(y, Decl(callWithSpread.ts, 31, 26))
|
>y : Symbol(y, Decl(callWithSpread.ts, 39, 26))
|
||||||
>z : Symbol(z, Decl(callWithSpread.ts, 31, 37))
|
>z : Symbol(z, Decl(callWithSpread.ts, 39, 37))
|
||||||
|
|
||||||
this.foo(x, y);
|
this.foo(x, y);
|
||||||
>this.foo : Symbol(C.foo, Decl(callWithSpread.ts, 34, 5))
|
>this.foo : Symbol(C.foo, Decl(callWithSpread.ts, 42, 5))
|
||||||
>this : Symbol(C, Decl(callWithSpread.ts, 28, 40))
|
>this : Symbol(C, Decl(callWithSpread.ts, 36, 40))
|
||||||
>foo : Symbol(C.foo, Decl(callWithSpread.ts, 34, 5))
|
>foo : Symbol(C.foo, Decl(callWithSpread.ts, 42, 5))
|
||||||
>x : Symbol(x, Decl(callWithSpread.ts, 31, 16))
|
>x : Symbol(x, Decl(callWithSpread.ts, 39, 16))
|
||||||
>y : Symbol(y, Decl(callWithSpread.ts, 31, 26))
|
>y : Symbol(y, Decl(callWithSpread.ts, 39, 26))
|
||||||
|
|
||||||
this.foo(x, y, ...z);
|
this.foo(x, y, ...z);
|
||||||
>this.foo : Symbol(C.foo, Decl(callWithSpread.ts, 34, 5))
|
>this.foo : Symbol(C.foo, Decl(callWithSpread.ts, 42, 5))
|
||||||
>this : Symbol(C, Decl(callWithSpread.ts, 28, 40))
|
>this : Symbol(C, Decl(callWithSpread.ts, 36, 40))
|
||||||
>foo : Symbol(C.foo, Decl(callWithSpread.ts, 34, 5))
|
>foo : Symbol(C.foo, Decl(callWithSpread.ts, 42, 5))
|
||||||
>x : Symbol(x, Decl(callWithSpread.ts, 31, 16))
|
>x : Symbol(x, Decl(callWithSpread.ts, 39, 16))
|
||||||
>y : Symbol(y, Decl(callWithSpread.ts, 31, 26))
|
>y : Symbol(y, Decl(callWithSpread.ts, 39, 26))
|
||||||
>z : Symbol(z, Decl(callWithSpread.ts, 31, 37))
|
>z : Symbol(z, Decl(callWithSpread.ts, 39, 37))
|
||||||
}
|
}
|
||||||
foo(x: number, y: number, ...z: string[]) {
|
foo(x: number, y: number, ...z: string[]) {
|
||||||
>foo : Symbol(C.foo, Decl(callWithSpread.ts, 34, 5))
|
>foo : Symbol(C.foo, Decl(callWithSpread.ts, 42, 5))
|
||||||
>x : Symbol(x, Decl(callWithSpread.ts, 35, 8))
|
>x : Symbol(x, Decl(callWithSpread.ts, 43, 8))
|
||||||
>y : Symbol(y, Decl(callWithSpread.ts, 35, 18))
|
>y : Symbol(y, Decl(callWithSpread.ts, 43, 18))
|
||||||
>z : Symbol(z, Decl(callWithSpread.ts, 35, 29))
|
>z : Symbol(z, Decl(callWithSpread.ts, 43, 29))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class D extends C {
|
class D extends C {
|
||||||
>D : Symbol(D, Decl(callWithSpread.ts, 37, 1))
|
>D : Symbol(D, Decl(callWithSpread.ts, 45, 1))
|
||||||
>C : Symbol(C, Decl(callWithSpread.ts, 28, 40))
|
>C : Symbol(C, Decl(callWithSpread.ts, 36, 40))
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super(1, 2);
|
super(1, 2);
|
||||||
>super : Symbol(C, Decl(callWithSpread.ts, 28, 40))
|
>super : Symbol(C, Decl(callWithSpread.ts, 36, 40))
|
||||||
|
|
||||||
super(1, 2, ...a);
|
super(1, 2, ...a);
|
||||||
>super : Symbol(C, Decl(callWithSpread.ts, 28, 40))
|
>super : Symbol(C, Decl(callWithSpread.ts, 36, 40))
|
||||||
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
||||||
}
|
}
|
||||||
foo() {
|
foo() {
|
||||||
>foo : Symbol(D.foo, Decl(callWithSpread.ts, 43, 5))
|
>foo : Symbol(D.foo, Decl(callWithSpread.ts, 51, 5))
|
||||||
|
|
||||||
super.foo(1, 2);
|
super.foo(1, 2);
|
||||||
>super.foo : Symbol(C.foo, Decl(callWithSpread.ts, 34, 5))
|
>super.foo : Symbol(C.foo, Decl(callWithSpread.ts, 42, 5))
|
||||||
>super : Symbol(C, Decl(callWithSpread.ts, 28, 40))
|
>super : Symbol(C, Decl(callWithSpread.ts, 36, 40))
|
||||||
>foo : Symbol(C.foo, Decl(callWithSpread.ts, 34, 5))
|
>foo : Symbol(C.foo, Decl(callWithSpread.ts, 42, 5))
|
||||||
|
|
||||||
super.foo(1, 2, ...a);
|
super.foo(1, 2, ...a);
|
||||||
>super.foo : Symbol(C.foo, Decl(callWithSpread.ts, 34, 5))
|
>super.foo : Symbol(C.foo, Decl(callWithSpread.ts, 42, 5))
|
||||||
>super : Symbol(C, Decl(callWithSpread.ts, 28, 40))
|
>super : Symbol(C, Decl(callWithSpread.ts, 36, 40))
|
||||||
>foo : Symbol(C.foo, Decl(callWithSpread.ts, 34, 5))
|
>foo : Symbol(C.foo, Decl(callWithSpread.ts, 42, 5))
|
||||||
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
>a : Symbol(a, Decl(callWithSpread.ts, 7, 3))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,11 +2,12 @@
|
||||||
interface X {
|
interface X {
|
||||||
>X : X
|
>X : X
|
||||||
|
|
||||||
foo(x: number, y: number, ...z: string[]);
|
foo(x: number, y: number, ...z: string[]): X;
|
||||||
>foo : (x: number, y: number, ...z: string[]) => any
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>x : number
|
>x : number
|
||||||
>y : number
|
>y : number
|
||||||
>z : string[]
|
>z : string[]
|
||||||
|
>X : X
|
||||||
}
|
}
|
||||||
|
|
||||||
function foo(x: number, y: number, ...z: string[]) {
|
function foo(x: number, y: number, ...z: string[]) {
|
||||||
|
@ -55,29 +56,80 @@ foo(1, 2, ...a, "abc");
|
||||||
>"abc" : "abc"
|
>"abc" : "abc"
|
||||||
|
|
||||||
obj.foo(1, 2, "abc");
|
obj.foo(1, 2, "abc");
|
||||||
>obj.foo(1, 2, "abc") : any
|
>obj.foo(1, 2, "abc") : X
|
||||||
>obj.foo : (x: number, y: number, ...z: string[]) => any
|
>obj.foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>obj : X
|
>obj : X
|
||||||
>foo : (x: number, y: number, ...z: string[]) => any
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>1 : 1
|
>1 : 1
|
||||||
>2 : 2
|
>2 : 2
|
||||||
>"abc" : "abc"
|
>"abc" : "abc"
|
||||||
|
|
||||||
obj.foo(1, 2, ...a);
|
obj.foo(1, 2, ...a);
|
||||||
>obj.foo(1, 2, ...a) : any
|
>obj.foo(1, 2, ...a) : X
|
||||||
>obj.foo : (x: number, y: number, ...z: string[]) => any
|
>obj.foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>obj : X
|
>obj : X
|
||||||
>foo : (x: number, y: number, ...z: string[]) => any
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>1 : 1
|
>1 : 1
|
||||||
>2 : 2
|
>2 : 2
|
||||||
>...a : string
|
>...a : string
|
||||||
>a : string[]
|
>a : string[]
|
||||||
|
|
||||||
obj.foo(1, 2, ...a, "abc");
|
obj.foo(1, 2, ...a, "abc");
|
||||||
>obj.foo(1, 2, ...a, "abc") : any
|
>obj.foo(1, 2, ...a, "abc") : X
|
||||||
>obj.foo : (x: number, y: number, ...z: string[]) => any
|
>obj.foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>obj : X
|
>obj : X
|
||||||
>foo : (x: number, y: number, ...z: string[]) => any
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>1 : 1
|
||||||
|
>2 : 2
|
||||||
|
>...a : string
|
||||||
|
>a : string[]
|
||||||
|
>"abc" : "abc"
|
||||||
|
|
||||||
|
obj.foo(1, 2, ...a).foo(1, 2, "abc");
|
||||||
|
>obj.foo(1, 2, ...a).foo(1, 2, "abc") : X
|
||||||
|
>obj.foo(1, 2, ...a).foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>obj.foo(1, 2, ...a) : X
|
||||||
|
>obj.foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>obj : X
|
||||||
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>1 : 1
|
||||||
|
>2 : 2
|
||||||
|
>...a : string
|
||||||
|
>a : string[]
|
||||||
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>1 : 1
|
||||||
|
>2 : 2
|
||||||
|
>"abc" : "abc"
|
||||||
|
|
||||||
|
obj.foo(1, 2, ...a).foo(1, 2, ...a);
|
||||||
|
>obj.foo(1, 2, ...a).foo(1, 2, ...a) : X
|
||||||
|
>obj.foo(1, 2, ...a).foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>obj.foo(1, 2, ...a) : X
|
||||||
|
>obj.foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>obj : X
|
||||||
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>1 : 1
|
||||||
|
>2 : 2
|
||||||
|
>...a : string
|
||||||
|
>a : string[]
|
||||||
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>1 : 1
|
||||||
|
>2 : 2
|
||||||
|
>...a : string
|
||||||
|
>a : string[]
|
||||||
|
|
||||||
|
obj.foo(1, 2, ...a).foo(1, 2, ...a, "abc");
|
||||||
|
>obj.foo(1, 2, ...a).foo(1, 2, ...a, "abc") : X
|
||||||
|
>obj.foo(1, 2, ...a).foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>obj.foo(1, 2, ...a) : X
|
||||||
|
>obj.foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>obj : X
|
||||||
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>1 : 1
|
||||||
|
>2 : 2
|
||||||
|
>...a : string
|
||||||
|
>a : string[]
|
||||||
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>1 : 1
|
>1 : 1
|
||||||
>2 : 2
|
>2 : 2
|
||||||
>...a : string
|
>...a : string
|
||||||
|
@ -85,32 +137,89 @@ obj.foo(1, 2, ...a, "abc");
|
||||||
>"abc" : "abc"
|
>"abc" : "abc"
|
||||||
|
|
||||||
(obj.foo)(1, 2, "abc");
|
(obj.foo)(1, 2, "abc");
|
||||||
>(obj.foo)(1, 2, "abc") : any
|
>(obj.foo)(1, 2, "abc") : X
|
||||||
>(obj.foo) : (x: number, y: number, ...z: string[]) => any
|
>(obj.foo) : (x: number, y: number, ...z: string[]) => X
|
||||||
>obj.foo : (x: number, y: number, ...z: string[]) => any
|
>obj.foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>obj : X
|
>obj : X
|
||||||
>foo : (x: number, y: number, ...z: string[]) => any
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>1 : 1
|
>1 : 1
|
||||||
>2 : 2
|
>2 : 2
|
||||||
>"abc" : "abc"
|
>"abc" : "abc"
|
||||||
|
|
||||||
(obj.foo)(1, 2, ...a);
|
(obj.foo)(1, 2, ...a);
|
||||||
>(obj.foo)(1, 2, ...a) : any
|
>(obj.foo)(1, 2, ...a) : X
|
||||||
>(obj.foo) : (x: number, y: number, ...z: string[]) => any
|
>(obj.foo) : (x: number, y: number, ...z: string[]) => X
|
||||||
>obj.foo : (x: number, y: number, ...z: string[]) => any
|
>obj.foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>obj : X
|
>obj : X
|
||||||
>foo : (x: number, y: number, ...z: string[]) => any
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>1 : 1
|
>1 : 1
|
||||||
>2 : 2
|
>2 : 2
|
||||||
>...a : string
|
>...a : string
|
||||||
>a : string[]
|
>a : string[]
|
||||||
|
|
||||||
(obj.foo)(1, 2, ...a, "abc");
|
(obj.foo)(1, 2, ...a, "abc");
|
||||||
>(obj.foo)(1, 2, ...a, "abc") : any
|
>(obj.foo)(1, 2, ...a, "abc") : X
|
||||||
>(obj.foo) : (x: number, y: number, ...z: string[]) => any
|
>(obj.foo) : (x: number, y: number, ...z: string[]) => X
|
||||||
>obj.foo : (x: number, y: number, ...z: string[]) => any
|
>obj.foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>obj : X
|
>obj : X
|
||||||
>foo : (x: number, y: number, ...z: string[]) => any
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>1 : 1
|
||||||
|
>2 : 2
|
||||||
|
>...a : string
|
||||||
|
>a : string[]
|
||||||
|
>"abc" : "abc"
|
||||||
|
|
||||||
|
((obj.foo)(1, 2, ...a).foo)(1, 2, "abc");
|
||||||
|
>((obj.foo)(1, 2, ...a).foo)(1, 2, "abc") : X
|
||||||
|
>((obj.foo)(1, 2, ...a).foo) : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>(obj.foo)(1, 2, ...a).foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>(obj.foo)(1, 2, ...a) : X
|
||||||
|
>(obj.foo) : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>obj.foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>obj : X
|
||||||
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>1 : 1
|
||||||
|
>2 : 2
|
||||||
|
>...a : string
|
||||||
|
>a : string[]
|
||||||
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>1 : 1
|
||||||
|
>2 : 2
|
||||||
|
>"abc" : "abc"
|
||||||
|
|
||||||
|
((obj.foo)(1, 2, ...a).foo)(1, 2, ...a);
|
||||||
|
>((obj.foo)(1, 2, ...a).foo)(1, 2, ...a) : X
|
||||||
|
>((obj.foo)(1, 2, ...a).foo) : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>(obj.foo)(1, 2, ...a).foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>(obj.foo)(1, 2, ...a) : X
|
||||||
|
>(obj.foo) : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>obj.foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>obj : X
|
||||||
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>1 : 1
|
||||||
|
>2 : 2
|
||||||
|
>...a : string
|
||||||
|
>a : string[]
|
||||||
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>1 : 1
|
||||||
|
>2 : 2
|
||||||
|
>...a : string
|
||||||
|
>a : string[]
|
||||||
|
|
||||||
|
((obj.foo)(1, 2, ...a).foo)(1, 2, ...a, "abc");
|
||||||
|
>((obj.foo)(1, 2, ...a).foo)(1, 2, ...a, "abc") : X
|
||||||
|
>((obj.foo)(1, 2, ...a).foo) : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>(obj.foo)(1, 2, ...a).foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>(obj.foo)(1, 2, ...a) : X
|
||||||
|
>(obj.foo) : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>obj.foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>obj : X
|
||||||
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
|
>1 : 1
|
||||||
|
>2 : 2
|
||||||
|
>...a : string
|
||||||
|
>a : string[]
|
||||||
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>1 : 1
|
>1 : 1
|
||||||
>2 : 2
|
>2 : 2
|
||||||
>...a : string
|
>...a : string
|
||||||
|
@ -118,35 +227,35 @@ obj.foo(1, 2, ...a, "abc");
|
||||||
>"abc" : "abc"
|
>"abc" : "abc"
|
||||||
|
|
||||||
xa[1].foo(1, 2, "abc");
|
xa[1].foo(1, 2, "abc");
|
||||||
>xa[1].foo(1, 2, "abc") : any
|
>xa[1].foo(1, 2, "abc") : X
|
||||||
>xa[1].foo : (x: number, y: number, ...z: string[]) => any
|
>xa[1].foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>xa[1] : X
|
>xa[1] : X
|
||||||
>xa : X[]
|
>xa : X[]
|
||||||
>1 : 1
|
>1 : 1
|
||||||
>foo : (x: number, y: number, ...z: string[]) => any
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>1 : 1
|
>1 : 1
|
||||||
>2 : 2
|
>2 : 2
|
||||||
>"abc" : "abc"
|
>"abc" : "abc"
|
||||||
|
|
||||||
xa[1].foo(1, 2, ...a);
|
xa[1].foo(1, 2, ...a);
|
||||||
>xa[1].foo(1, 2, ...a) : any
|
>xa[1].foo(1, 2, ...a) : X
|
||||||
>xa[1].foo : (x: number, y: number, ...z: string[]) => any
|
>xa[1].foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>xa[1] : X
|
>xa[1] : X
|
||||||
>xa : X[]
|
>xa : X[]
|
||||||
>1 : 1
|
>1 : 1
|
||||||
>foo : (x: number, y: number, ...z: string[]) => any
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>1 : 1
|
>1 : 1
|
||||||
>2 : 2
|
>2 : 2
|
||||||
>...a : string
|
>...a : string
|
||||||
>a : string[]
|
>a : string[]
|
||||||
|
|
||||||
xa[1].foo(1, 2, ...a, "abc");
|
xa[1].foo(1, 2, ...a, "abc");
|
||||||
>xa[1].foo(1, 2, ...a, "abc") : any
|
>xa[1].foo(1, 2, ...a, "abc") : X
|
||||||
>xa[1].foo : (x: number, y: number, ...z: string[]) => any
|
>xa[1].foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>xa[1] : X
|
>xa[1] : X
|
||||||
>xa : X[]
|
>xa : X[]
|
||||||
>1 : 1
|
>1 : 1
|
||||||
>foo : (x: number, y: number, ...z: string[]) => any
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>1 : 1
|
>1 : 1
|
||||||
>2 : 2
|
>2 : 2
|
||||||
>...a : string
|
>...a : string
|
||||||
|
@ -158,11 +267,11 @@ xa[1].foo(1, 2, ...a, "abc");
|
||||||
>(<Function>xa[1].foo) : Function
|
>(<Function>xa[1].foo) : Function
|
||||||
><Function>xa[1].foo : Function
|
><Function>xa[1].foo : Function
|
||||||
>Function : Function
|
>Function : Function
|
||||||
>xa[1].foo : (x: number, y: number, ...z: string[]) => any
|
>xa[1].foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>xa[1] : X
|
>xa[1] : X
|
||||||
>xa : X[]
|
>xa : X[]
|
||||||
>1 : 1
|
>1 : 1
|
||||||
>foo : (x: number, y: number, ...z: string[]) => any
|
>foo : (x: number, y: number, ...z: string[]) => X
|
||||||
>...[1, 2, "abc"] : string | number
|
>...[1, 2, "abc"] : string | number
|
||||||
>[1, 2, "abc"] : (string | number)[]
|
>[1, 2, "abc"] : (string | number)[]
|
||||||
>1 : 1
|
>1 : 1
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
interface X {
|
interface X {
|
||||||
foo(x: number, y: number, ...z: string[]);
|
foo(x: number, y: number, ...z: string[]): X;
|
||||||
}
|
}
|
||||||
|
|
||||||
function foo(x: number, y: number, ...z: string[]) {
|
function foo(x: number, y: number, ...z: string[]) {
|
||||||
|
@ -18,10 +18,18 @@ obj.foo(1, 2, "abc");
|
||||||
obj.foo(1, 2, ...a);
|
obj.foo(1, 2, ...a);
|
||||||
obj.foo(1, 2, ...a, "abc");
|
obj.foo(1, 2, ...a, "abc");
|
||||||
|
|
||||||
|
obj.foo(1, 2, ...a).foo(1, 2, "abc");
|
||||||
|
obj.foo(1, 2, ...a).foo(1, 2, ...a);
|
||||||
|
obj.foo(1, 2, ...a).foo(1, 2, ...a, "abc");
|
||||||
|
|
||||||
(obj.foo)(1, 2, "abc");
|
(obj.foo)(1, 2, "abc");
|
||||||
(obj.foo)(1, 2, ...a);
|
(obj.foo)(1, 2, ...a);
|
||||||
(obj.foo)(1, 2, ...a, "abc");
|
(obj.foo)(1, 2, ...a, "abc");
|
||||||
|
|
||||||
|
((obj.foo)(1, 2, ...a).foo)(1, 2, "abc");
|
||||||
|
((obj.foo)(1, 2, ...a).foo)(1, 2, ...a);
|
||||||
|
((obj.foo)(1, 2, ...a).foo)(1, 2, ...a, "abc");
|
||||||
|
|
||||||
xa[1].foo(1, 2, "abc");
|
xa[1].foo(1, 2, "abc");
|
||||||
xa[1].foo(1, 2, ...a);
|
xa[1].foo(1, 2, ...a);
|
||||||
xa[1].foo(1, 2, ...a, "abc");
|
xa[1].foo(1, 2, ...a, "abc");
|
||||||
|
|
Loading…
Reference in a new issue