@@ -1685,11 +1685,10 @@ namespace ts {
1685
1685
return type;
1686
1686
}
1687
1687
1688
- function createNonPrimitiveType(): NonPrimitiveType {
1689
- const type = <NonPrimitiveType> setStructuredTypeMembers(
1688
+ function createNonPrimitiveType(): ResolvedType {
1689
+ const type = setStructuredTypeMembers(
1690
1690
createObjectType(ObjectFlags.NonPrimitive, undefined),
1691
1691
emptySymbols, emptyArray, emptyArray, undefined, undefined);
1692
- type.intrinsicName = "object";
1693
1692
return type;
1694
1693
}
1695
1694
@@ -2321,6 +2320,9 @@ namespace ts {
2321
2320
else if (type.flags & TypeFlags.UnionOrIntersection) {
2322
2321
writeUnionOrIntersectionType(<UnionOrIntersectionType>type, nextFlags);
2323
2322
}
2323
+ else if (getObjectFlags(type) & ObjectFlags.NonPrimitive) {
2324
+ writer.writeKeyword("object");
2325
+ }
2324
2326
else if (getObjectFlags(type) & (ObjectFlags.Anonymous | ObjectFlags.Mapped)) {
2325
2327
writeAnonymousType(<ObjectType>type, nextFlags);
2326
2328
}
@@ -3087,6 +3089,10 @@ namespace ts {
3087
3089
return type && (type.flags & TypeFlags.Never) !== 0;
3088
3090
}
3089
3091
3092
+ function isTypeNonPrimitive(type: Type) {
3093
+ return type === nonPrimitiveType;
3094
+ }
3095
+
3090
3096
// Return the type of a binding element parent. We check SymbolLinks first to see if a type has been
3091
3097
// assigned by contextual typing.
3092
3098
function getTypeForBindingElementParent(node: VariableLikeDeclaration) {
@@ -7151,7 +7157,6 @@ namespace ts {
7151
7157
if (source.flags & TypeFlags.Enum && target.flags & TypeFlags.Enum && isEnumTypeRelatedTo(<EnumType>source, <EnumType>target, errorReporter)) return true;
7152
7158
if (source.flags & TypeFlags.Undefined && (!strictNullChecks || target.flags & (TypeFlags.Undefined | TypeFlags.Void))) return true;
7153
7159
if (source.flags & TypeFlags.Null && (!strictNullChecks || target.flags & TypeFlags.Null)) return true;
7154
- if (source.flags & TypeFlags.Object && (<ObjectType>source).objectFlags & ObjectFlags.NonPrimitive && target.flags & TypeFlags.Primitive) return false;
7155
7160
if (relation === assignableRelation || relation === comparableRelation) {
7156
7161
if (source.flags & TypeFlags.Any) return true;
7157
7162
if ((source.flags & TypeFlags.Number | source.flags & TypeFlags.NumberLiteral) && target.flags & TypeFlags.EnumLike) return true;
@@ -7470,7 +7475,7 @@ namespace ts {
7470
7475
}
7471
7476
}
7472
7477
}
7473
- else {
7478
+ else if (!(source.flags & TypeFlags.Primitive && isTypeNonPrimitive(target))) {
7474
7479
if (getObjectFlags(source) & ObjectFlags.Reference && getObjectFlags(target) & ObjectFlags.Reference && (<TypeReference>source).target === (<TypeReference>target).target) {
7475
7480
// We have type references to same target type, see if relationship holds for all type arguments
7476
7481
if (result = typeArgumentsRelatedTo(<TypeReference>source, <TypeReference>target, reportErrors)) {
@@ -18085,6 +18090,7 @@ namespace ts {
18085
18090
case "string":
18086
18091
case "symbol":
18087
18092
case "void":
18093
+ case "object":
18088
18094
error(name, message, (<Identifier>name).text);
18089
18095
}
18090
18096
}
0 commit comments