diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 6e249c3977d..0447e42ed64 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8708,7 +8708,7 @@ namespace ts { if (maybeTypeOfKind(target, TypeFlags.Object) && !(getObjectFlags(target) & ObjectFlags.ObjectLiteralPatternWithComputedProperties)) { const isComparingJsxAttributes = !!(source.flags & TypeFlags.JsxAttributes); if ((relation === assignableRelation || relation === comparableRelation) && - (target === globalObjectType || (!isComparingJsxAttributes && isEmptyObjectType(target)))) { + (isTypeSubsetOf(globalObjectType, target) || (!isComparingJsxAttributes && isEmptyObjectType(target)))) { return false; } for (const prop of getPropertiesOfObjectType(source)) { diff --git a/tests/baselines/reference/unknownPropertiesAreAssignableToObjectUnion.js b/tests/baselines/reference/unknownPropertiesAreAssignableToObjectUnion.js new file mode 100644 index 00000000000..7140f13cb7b --- /dev/null +++ b/tests/baselines/reference/unknownPropertiesAreAssignableToObjectUnion.js @@ -0,0 +1,8 @@ +//// [unknownPropertiesAreAssignableToObjectUnion.ts] +const x: Object | string = { x: 0 }; +const y: Object | undefined = { x: 0 }; + + +//// [unknownPropertiesAreAssignableToObjectUnion.js] +var x = { x: 0 }; +var y = { x: 0 }; diff --git a/tests/baselines/reference/unknownPropertiesAreAssignableToObjectUnion.symbols b/tests/baselines/reference/unknownPropertiesAreAssignableToObjectUnion.symbols new file mode 100644 index 00000000000..f9c0b09c987 --- /dev/null +++ b/tests/baselines/reference/unknownPropertiesAreAssignableToObjectUnion.symbols @@ -0,0 +1,11 @@ +=== tests/cases/compiler/unknownPropertiesAreAssignableToObjectUnion.ts === +const x: Object | string = { x: 0 }; +>x : Symbol(x, Decl(unknownPropertiesAreAssignableToObjectUnion.ts, 0, 5)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>x : Symbol(x, Decl(unknownPropertiesAreAssignableToObjectUnion.ts, 0, 28)) + +const y: Object | undefined = { x: 0 }; +>y : Symbol(y, Decl(unknownPropertiesAreAssignableToObjectUnion.ts, 1, 5)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>x : Symbol(x, Decl(unknownPropertiesAreAssignableToObjectUnion.ts, 1, 31)) + diff --git a/tests/baselines/reference/unknownPropertiesAreAssignableToObjectUnion.types b/tests/baselines/reference/unknownPropertiesAreAssignableToObjectUnion.types new file mode 100644 index 00000000000..d242cb8805c --- /dev/null +++ b/tests/baselines/reference/unknownPropertiesAreAssignableToObjectUnion.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/unknownPropertiesAreAssignableToObjectUnion.ts === +const x: Object | string = { x: 0 }; +>x : string | Object +>Object : Object +>{ x: 0 } : { x: number; } +>x : number +>0 : 0 + +const y: Object | undefined = { x: 0 }; +>y : Object | undefined +>Object : Object +>{ x: 0 } : { x: number; } +>x : number +>0 : 0 + diff --git a/tests/cases/compiler/unknownPropertiesAreAssignableToObjectUnion.ts b/tests/cases/compiler/unknownPropertiesAreAssignableToObjectUnion.ts new file mode 100644 index 00000000000..eb4209509de --- /dev/null +++ b/tests/cases/compiler/unknownPropertiesAreAssignableToObjectUnion.ts @@ -0,0 +1,3 @@ +// @strictNullChecks: true +const x: Object | string = { x: 0 }; +const y: Object | undefined = { x: 0 };