Skip to content

Commit 24bb21c

Browse files
address code review
1 parent b4c1598 commit 24bb21c

File tree

6 files changed

+17
-18
lines changed

6 files changed

+17
-18
lines changed

src/compiler/checker.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6291,6 +6291,9 @@ namespace ts {
62916291
if (right.flags & TypeFlags.Union) {
62926292
return mapType(right, t => getSpreadType(left, t));
62936293
}
6294+
if (right.flags & TypeFlags.NonPrimitive) {
6295+
return emptyObjectType;
6296+
}
62946297

62956298
const members = createMap<Symbol>();
62966299
const skippedPrivateMembers = createMap<boolean>();
@@ -15719,12 +15722,12 @@ namespace ts {
1571915722
}
1572015723
}
1572115724

15722-
/**
15725+
/**
1572315726
* Static members being set on a constructor function may conflict with built-in properties
15724-
* of Function. Esp. in ECMAScript 5 there are non-configurable and non-writable
15725-
* built-in properties. This check issues a transpile error when a class has a static
15727+
* of Function. Esp. in ECMAScript 5 there are non-configurable and non-writable
15728+
* built-in properties. This check issues a transpile error when a class has a static
1572615729
* member with the same name as a non-writable built-in property.
15727-
*
15730+
*
1572815731
* @see http://www.ecma-international.org/ecma-262/5.1/#sec-15.3.3
1572915732
* @see http://www.ecma-international.org/ecma-262/5.1/#sec-15.3.5
1573015733
* @see http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-the-function-constructor

tests/baselines/reference/objectSpread.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,7 @@ let computedAfter: { a: number, b: string, "at the end": number } =
7979
let a = 12;
8080
let shortCutted: { a: number, b: string } = { ...o, a }
8181
// non primitive
82-
let spreadNonPrimitve = { ...<object>{}}
83-
82+
let spreadNonPrimitive = { ...<object>{}};
8483

8584

8685
//// [objectSpread.js]
@@ -151,5 +150,5 @@ var computedAfter = __assign({}, o, (_c = { b: 'yeah' }, _c['at the end'] = 14,
151150
var a = 12;
152151
var shortCutted = __assign({}, o, { a: a });
153152
// non primitive
154-
var spreadNonPrimitve = __assign({}, {});
153+
var spreadNonPrimitive = __assign({}, {});
155154
var _a, _b, _c;

tests/baselines/reference/objectSpread.symbols

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,6 @@ let shortCutted: { a: number, b: string } = { ...o, a }
317317
>a : Symbol(a, Decl(objectSpread.ts, 78, 51))
318318

319319
// non primitive
320-
let spreadNonPrimitve = { ...<object>{}}
321-
>spreadNonPrimitve : Symbol(spreadNonPrimitve, Decl(objectSpread.ts, 80, 3))
322-
320+
let spreadNonPrimitive = { ...<object>{}};
321+
>spreadNonPrimitive : Symbol(spreadNonPrimitive, Decl(objectSpread.ts, 80, 3))
323322

tests/baselines/reference/objectSpread.types

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -408,10 +408,9 @@ let shortCutted: { a: number, b: string } = { ...o, a }
408408
>a : number
409409

410410
// non primitive
411-
let spreadNonPrimitve = { ...<object>{}}
412-
>spreadNonPrimitve : { constructor: Function; toString(): string; toLocaleString(): string; valueOf(): Object; hasOwnProperty(v: string): boolean; isPrototypeOf(v: Object): boolean; propertyIsEnumerable(v: string): boolean; }
413-
>{ ...<object>{}} : { constructor: Function; toString(): string; toLocaleString(): string; valueOf(): Object; hasOwnProperty(v: string): boolean; isPrototypeOf(v: Object): boolean; propertyIsEnumerable(v: string): boolean; }
411+
let spreadNonPrimitive = { ...<object>{}};
412+
>spreadNonPrimitive : {}
413+
>{ ...<object>{}} : {}
414414
><object>{} : object
415415
>{} : {}
416416

417-

tests/baselines/reference/objectSpreadNegative.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ tests/cases/conformance/types/spread/objectSpreadNegative.ts(37,19): error TS269
1414
tests/cases/conformance/types/spread/objectSpreadNegative.ts(42,1): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type '{}' has no compatible call signatures.
1515
tests/cases/conformance/types/spread/objectSpreadNegative.ts(46,12): error TS2339: Property 'b' does not exist on type '{}'.
1616
tests/cases/conformance/types/spread/objectSpreadNegative.ts(52,9): error TS2339: Property 'm' does not exist on type '{ p: number; }'.
17-
tests/cases/conformance/types/spread/objectSpreadNegative.ts(57,11): error TS2339: Property 'a' does not exist on type '{ constructor: Function; toString(): string; toLocaleString(): string; valueOf(): Object; hasOwnProperty(v: string): boolean; isPrototypeOf(v: Object): boolean; propertyIsEnumerable(v: string): boolean; }'.
17+
tests/cases/conformance/types/spread/objectSpreadNegative.ts(57,11): error TS2339: Property 'a' does not exist on type '{}'.
1818
tests/cases/conformance/types/spread/objectSpreadNegative.ts(61,14): error TS2698: Spread types may only be created from object types.
1919
tests/cases/conformance/types/spread/objectSpreadNegative.ts(64,14): error TS2698: Spread types may only be created from object types.
2020

@@ -107,7 +107,7 @@ tests/cases/conformance/types/spread/objectSpreadNegative.ts(64,14): error TS269
107107
let spreadObj = { ...obj };
108108
spreadObj.a; // error 'a' is not in {}
109109
~
110-
!!! error TS2339: Property 'a' does not exist on type '{ constructor: Function; toString(): string; toLocaleString(): string; valueOf(): Object; hasOwnProperty(v: string): boolean; isPrototypeOf(v: Object): boolean; propertyIsEnumerable(v: string): boolean; }'.
110+
!!! error TS2339: Property 'a' does not exist on type '{}'.
111111

112112
// generics
113113
function f<T, U>(t: T, u: U) {

tests/cases/conformance/types/spread/objectSpread.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,4 @@ let computedAfter: { a: number, b: string, "at the end": number } =
7979
let a = 12;
8080
let shortCutted: { a: number, b: string } = { ...o, a }
8181
// non primitive
82-
let spreadNonPrimitve = { ...<object>{}}
83-
82+
let spreadNonPrimitive = { ...<object>{}};

0 commit comments

Comments
 (0)