From 4bc0d85d29f6533f07368b93f7002b8f179b71bd Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Tue, 12 Dec 2017 08:37:34 -0800 Subject: [PATCH] Test:spread `object` retains lefthandside 1. Make sure that spreading `object` doesn't lose everything to the left. 2. Update baselines to show that `{ ...object }` is now `{}`. --- tests/baselines/reference/objectSpread.types | 4 ++-- .../reference/objectSpreadNegative.errors.txt | 4 ++-- .../reference/objectSpreadNegative.types | 6 +++--- tests/baselines/reference/spreadNonPrimitive.js | 15 +++++++++++++++ .../reference/spreadNonPrimitive.symbols | 12 ++++++++++++ .../baselines/reference/spreadNonPrimitive.types | 15 +++++++++++++++ .../types/spread/spreadNonPrimitive.ts | 2 ++ 7 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 tests/baselines/reference/spreadNonPrimitive.js create mode 100644 tests/baselines/reference/spreadNonPrimitive.symbols create mode 100644 tests/baselines/reference/spreadNonPrimitive.types create mode 100644 tests/cases/conformance/types/spread/spreadNonPrimitive.ts diff --git a/tests/baselines/reference/objectSpread.types b/tests/baselines/reference/objectSpread.types index 2d9bada571b..1f87ed4930d 100644 --- a/tests/baselines/reference/objectSpread.types +++ b/tests/baselines/reference/objectSpread.types @@ -571,8 +571,8 @@ let shortCutted: { a: number, b: string } = { ...o, a } // non primitive let spreadNonPrimitive = { ...{}}; ->spreadNonPrimitive : object ->{ ...{}} : object +>spreadNonPrimitive : {} +>{ ...{}} : {} >{} : object >{} : {} diff --git a/tests/baselines/reference/objectSpreadNegative.errors.txt b/tests/baselines/reference/objectSpreadNegative.errors.txt index 5b78f10f281..92225755c71 100644 --- a/tests/baselines/reference/objectSpreadNegative.errors.txt +++ b/tests/baselines/reference/objectSpreadNegative.errors.txt @@ -15,7 +15,7 @@ tests/cases/conformance/types/spread/objectSpreadNegative.ts(38,19): error TS269 tests/cases/conformance/types/spread/objectSpreadNegative.ts(43,1): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type '{}' has no compatible call signatures. tests/cases/conformance/types/spread/objectSpreadNegative.ts(47,12): error TS2339: Property 'b' does not exist on type '{}'. tests/cases/conformance/types/spread/objectSpreadNegative.ts(53,9): error TS2339: Property 'm' does not exist on type '{ p: number; }'. -tests/cases/conformance/types/spread/objectSpreadNegative.ts(58,11): error TS2339: Property 'a' does not exist on type 'object'. +tests/cases/conformance/types/spread/objectSpreadNegative.ts(58,11): error TS2339: Property 'a' does not exist on type '{}'. tests/cases/conformance/types/spread/objectSpreadNegative.ts(62,14): error TS2698: Spread types may only be created from object types. tests/cases/conformance/types/spread/objectSpreadNegative.ts(65,14): error TS2698: Spread types may only be created from object types. tests/cases/conformance/types/spread/objectSpreadNegative.ts(79,37): error TS2322: Type '{ a: string; b: string; extra: string; }' is not assignable to type 'A'. @@ -117,7 +117,7 @@ tests/cases/conformance/types/spread/objectSpreadNegative.ts(84,7): error TS2322 let spreadObj = { ...obj }; spreadObj.a; // error 'a' is not in {} ~ -!!! error TS2339: Property 'a' does not exist on type 'object'. +!!! error TS2339: Property 'a' does not exist on type '{}'. // generics function f(t: T, u: U) { diff --git a/tests/baselines/reference/objectSpreadNegative.types b/tests/baselines/reference/objectSpreadNegative.types index 2e42453f41c..5c3abb041f8 100644 --- a/tests/baselines/reference/objectSpreadNegative.types +++ b/tests/baselines/reference/objectSpreadNegative.types @@ -222,13 +222,13 @@ let obj: object = { a: 123 }; >123 : 123 let spreadObj = { ...obj }; ->spreadObj : object ->{ ...obj } : object +>spreadObj : {} +>{ ...obj } : {} >obj : object spreadObj.a; // error 'a' is not in {} >spreadObj.a : any ->spreadObj : object +>spreadObj : {} >a : any // generics diff --git a/tests/baselines/reference/spreadNonPrimitive.js b/tests/baselines/reference/spreadNonPrimitive.js new file mode 100644 index 00000000000..3f5774197e4 --- /dev/null +++ b/tests/baselines/reference/spreadNonPrimitive.js @@ -0,0 +1,15 @@ +//// [spreadNonPrimitive.ts] +declare let o: object; +const x: { a: number, b: number } = { a: 1, ...o, b: 2 }; + + +//// [spreadNonPrimitive.js] +var __assign = (this && this.__assign) || Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; +}; +var x = __assign({ a: 1 }, o, { b: 2 }); diff --git a/tests/baselines/reference/spreadNonPrimitive.symbols b/tests/baselines/reference/spreadNonPrimitive.symbols new file mode 100644 index 00000000000..1cc15865fa0 --- /dev/null +++ b/tests/baselines/reference/spreadNonPrimitive.symbols @@ -0,0 +1,12 @@ +=== tests/cases/conformance/types/spread/spreadNonPrimitive.ts === +declare let o: object; +>o : Symbol(o, Decl(spreadNonPrimitive.ts, 0, 11)) + +const x: { a: number, b: number } = { a: 1, ...o, b: 2 }; +>x : Symbol(x, Decl(spreadNonPrimitive.ts, 1, 5)) +>a : Symbol(a, Decl(spreadNonPrimitive.ts, 1, 10)) +>b : Symbol(b, Decl(spreadNonPrimitive.ts, 1, 21)) +>a : Symbol(a, Decl(spreadNonPrimitive.ts, 1, 37)) +>o : Symbol(o, Decl(spreadNonPrimitive.ts, 0, 11)) +>b : Symbol(b, Decl(spreadNonPrimitive.ts, 1, 49)) + diff --git a/tests/baselines/reference/spreadNonPrimitive.types b/tests/baselines/reference/spreadNonPrimitive.types new file mode 100644 index 00000000000..1bc263c1136 --- /dev/null +++ b/tests/baselines/reference/spreadNonPrimitive.types @@ -0,0 +1,15 @@ +=== tests/cases/conformance/types/spread/spreadNonPrimitive.ts === +declare let o: object; +>o : object + +const x: { a: number, b: number } = { a: 1, ...o, b: 2 }; +>x : { a: number; b: number; } +>a : number +>b : number +>{ a: 1, ...o, b: 2 } : { b: number; a: number; } +>a : number +>1 : 1 +>o : object +>b : number +>2 : 2 + diff --git a/tests/cases/conformance/types/spread/spreadNonPrimitive.ts b/tests/cases/conformance/types/spread/spreadNonPrimitive.ts new file mode 100644 index 00000000000..b7dac95713e --- /dev/null +++ b/tests/cases/conformance/types/spread/spreadNonPrimitive.ts @@ -0,0 +1,2 @@ +declare let o: object; +const x: { a: number, b: number } = { a: 1, ...o, b: 2 };