From 98720755bdb0f6858905d32ed149a2a85cafe7b2 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Fri, 7 Oct 2016 08:58:50 -0700 Subject: [PATCH] Spread type:new assignability+simplification tests --- .../conformance/types/spread/objectSpreadGeneric.ts | 13 ++++++------- .../types/spread/objectSpreadNegative.ts | 7 +++---- .../types/spread/objectSpreadScenarios.ts | 2 +- tests/cases/fourslash/findAllRefsForObjectSpread.ts | 2 +- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/tests/cases/conformance/types/spread/objectSpreadGeneric.ts b/tests/cases/conformance/types/spread/objectSpreadGeneric.ts index a6919ce8149..e3bd1ab7bb3 100644 --- a/tests/cases/conformance/types/spread/objectSpreadGeneric.ts +++ b/tests/cases/conformance/types/spread/objectSpreadGeneric.ts @@ -1,13 +1,12 @@ function f(t: T, u: U, v: V): void { let o: { ...T, ...U, ...V }; - let uu: { ...U, ...U}; - let u: { ...U }; - let u0: U; - uu = u; // ok, multiple spreads are equivalent to a single one - u = uu; // ok, multiple spreads are equivalent to a single one - u0 = u; // error, might be missing a ton of stuff - u = u0; // ok, type has at least all the properties of the spread + let uus: { ...U, ...U}; + let us: { ...U }; const same: { ...T, ...U, ...V } = o; // ok + uus = us; // ok, multiple spreads are equivalent to a single one + us = uus; // ok, multiple spreads are equivalent to a single one + us = u; // ok, type has at least all the properties of the spread + u = us; // error, might be missing a ton of stuff const reversed: { ...V, ...U, ...T } = o; // error, reversed const reversed2: { ...U, ...T, ...V } = o; // error, U and T are still reversed const missingT: { ...U, ...V } = o; // error, missing T diff --git a/tests/cases/conformance/types/spread/objectSpreadNegative.ts b/tests/cases/conformance/types/spread/objectSpreadNegative.ts index 4d1cfbe398c..d492db4c638 100644 --- a/tests/cases/conformance/types/spread/objectSpreadNegative.ts +++ b/tests/cases/conformance/types/spread/objectSpreadNegative.ts @@ -8,10 +8,8 @@ class PrivateOptionalX { class PublicX { public x: number; } -let privateOptionalx: PrivateOptionalX; -let publicx: PublicX; -let o3 = { ...publicx, ...privateOptionalx }; -let sn: string | number = o3.x; // error, x is private +let o3: { ...PublicX, ...PrivateOptionalX }; +let sn: number = o3.x; // error, x is private let optionalString: { sn?: string }; let optionalNumber: { sn?: number }; let allOptional: { sn: string | number } = { ...optionalString, ...optionalNumber }; @@ -46,6 +44,7 @@ let callableConstructableSpread: { ...PublicX, (n: number): number, new (p: numb callableConstructableSpread(12); // error, no call signature new callableConstructableSpread(12); // error, no construct signature +let publicx: PublicX; let callableSpread = { ...publicx, ...(n => n + 1) }; // error, can't spread functions // { ...U } is not assignable to U diff --git a/tests/cases/conformance/types/spread/objectSpreadScenarios.ts b/tests/cases/conformance/types/spread/objectSpreadScenarios.ts index c80cffa44e7..1db930cb71c 100644 --- a/tests/cases/conformance/types/spread/objectSpreadScenarios.ts +++ b/tests/cases/conformance/types/spread/objectSpreadScenarios.ts @@ -3,7 +3,7 @@ interface B1 { b: number }; function override(initial: U, override: U): { ...U, ...U } { return { ...initial, ...override }; } -function update(this: { u: U }, override: U): void { +function update(this: { u: { ...U } }, override: U): void { this.u = { ...this.u, ...override }; } function mixin(one: T, two: U): { ...T, ...U } { diff --git a/tests/cases/fourslash/findAllRefsForObjectSpread.ts b/tests/cases/fourslash/findAllRefsForObjectSpread.ts index fe0a7f9c201..650324a5d84 100644 --- a/tests/cases/fourslash/findAllRefsForObjectSpread.ts +++ b/tests/cases/fourslash/findAllRefsForObjectSpread.ts @@ -1,6 +1,6 @@ /// -////interface A1 { [|a|]: number }; +////interface A1 { [|a|]: string }; ////interface A2 { [|a|]?: number }; ////let a12: { ...A1, ...A2 }; ////a12.[|a|];