diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 963d2e77c1b..97ca01bc086 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -1,4 +1,4 @@
-///
+///
///
/* @internal */
@@ -11784,7 +11784,7 @@ namespace ts {
}
function isValidSpreadType(type: Type): boolean {
- return !!(type.flags & (TypeFlags.Any | TypeFlags.Null | TypeFlags.Undefined) ||
+ return !!(type.flags & (TypeFlags.Any | TypeFlags.Null | TypeFlags.Undefined | TypeFlags.NonPrimitive) ||
type.flags & TypeFlags.Object && !isGenericMappedType(type) ||
type.flags & TypeFlags.UnionOrIntersection && !forEach((type).types, t => !isValidSpreadType(t)));
}
diff --git a/tests/baselines/reference/nonPrimitiveAccessProperty.errors.txt b/tests/baselines/reference/nonPrimitiveAccessProperty.errors.txt
index 8ef94c64448..0a6dfa66b86 100644
--- a/tests/baselines/reference/nonPrimitiveAccessProperty.errors.txt
+++ b/tests/baselines/reference/nonPrimitiveAccessProperty.errors.txt
@@ -1,10 +1,16 @@
tests/cases/conformance/types/nonPrimitive/nonPrimitiveAccessProperty.ts(3,3): error TS2339: Property 'nonExist' does not exist on type 'object'.
+tests/cases/conformance/types/nonPrimitive/nonPrimitiveAccessProperty.ts(5,7): error TS2459: Type 'object' has no property 'destructuring' and no string index signature.
-==== tests/cases/conformance/types/nonPrimitive/nonPrimitiveAccessProperty.ts (1 errors) ====
+==== tests/cases/conformance/types/nonPrimitive/nonPrimitiveAccessProperty.ts (2 errors) ====
var a: object;
a.toString();
a.nonExist(); // error
~~~~~~~~
!!! error TS2339: Property 'nonExist' does not exist on type 'object'.
+
+ var { destructuring } = a; // error
+ ~~~~~~~~~~~~~
+!!! error TS2459: Type 'object' has no property 'destructuring' and no string index signature.
+ var { ...rest } = a; // ok
\ No newline at end of file
diff --git a/tests/baselines/reference/nonPrimitiveAccessProperty.js b/tests/baselines/reference/nonPrimitiveAccessProperty.js
index a71b2aba865..abfe2605e32 100644
--- a/tests/baselines/reference/nonPrimitiveAccessProperty.js
+++ b/tests/baselines/reference/nonPrimitiveAccessProperty.js
@@ -2,9 +2,23 @@
var a: object;
a.toString();
a.nonExist(); // error
+
+var { destructuring } = a; // error
+var { ...rest } = a; // ok
//// [nonPrimitiveAccessProperty.js]
+var __rest = (this && this.__rest) || function (s, e) {
+ var t = {};
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+ t[p] = s[p];
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
+ t[p[i]] = s[p[i]];
+ return t;
+};
var a;
a.toString();
a.nonExist(); // error
+var destructuring = a.destructuring; // error
+var rest = __rest(a, []); // ok
diff --git a/tests/baselines/reference/objectSpread.js b/tests/baselines/reference/objectSpread.js
index 4305e17ab31..259b86628a5 100644
--- a/tests/baselines/reference/objectSpread.js
+++ b/tests/baselines/reference/objectSpread.js
@@ -78,6 +78,8 @@ let computedAfter: { a: number, b: string, "at the end": number } =
// shortcut syntax
let a = 12;
let shortCutted: { a: number, b: string } = { ...o, a }
+// non primitive
+let spreadNonPrimitve = { ...