mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Fix destructuring evaluation order for initializers
This commit is contained in:
@@ -89,6 +89,7 @@
|
||||
"unittests/evaluation/asyncArrow.ts",
|
||||
"unittests/evaluation/asyncGenerator.ts",
|
||||
"unittests/evaluation/awaiter.ts",
|
||||
"unittests/evaluation/destructuring.ts",
|
||||
"unittests/evaluation/forAwaitOf.ts",
|
||||
"unittests/evaluation/forOf.ts",
|
||||
"unittests/evaluation/optionalCall.ts",
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
describe("unittests:: evaluation:: destructuring", () => {
|
||||
// https://github.com/microsoft/TypeScript/issues/39205
|
||||
describe("correct order for array destructuring evaluation and initializers", () => {
|
||||
it("when element is undefined", () => {
|
||||
const result = evaluator.evaluateTypeScript(`
|
||||
export const output: any[] = [];
|
||||
const order = (n: any): any => output.push(n);
|
||||
let [{ [order(1)]: x } = order(0)] = [];
|
||||
`, { target: ts.ScriptTarget.ES5 });
|
||||
assert.deepEqual(result.output, [0, 1]);
|
||||
});
|
||||
it("when element is defined", async () => {
|
||||
const result = evaluator.evaluateTypeScript(`
|
||||
export const output: any[] = [];
|
||||
const order = (n: any): any => output.push(n);
|
||||
let [{ [order(1)]: x } = order(0)] = [{}];
|
||||
`, { target: ts.ScriptTarget.ES5 });
|
||||
assert.deepEqual(result.output, [1]);
|
||||
});
|
||||
});
|
||||
describe("correct order for array destructuring evaluation and initializers with spread", () => {
|
||||
it("ES5", () => {
|
||||
const result = evaluator.evaluateTypeScript(`
|
||||
export const output: any[] = [];
|
||||
const order = (n: any): any => output.push(n);
|
||||
let { [order(0)]: { [order(2)]: z } = order(1), ...w } = {} as any;
|
||||
`, { target: ts.ScriptTarget.ES5 });
|
||||
assert.deepEqual(result.output, [0, 1, 2]);
|
||||
});
|
||||
it("ES2015", () => {
|
||||
const result = evaluator.evaluateTypeScript(`
|
||||
export const output: any[] = [];
|
||||
const order = (n: any): any => output.push(n);
|
||||
let { [order(0)]: { [order(2)]: z } = order(1), ...w } = {} as any;
|
||||
`, { target: ts.ScriptTarget.ES2015 });
|
||||
assert.deepEqual(result.output, [0, 1, 2]);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user