@@ -146,6 +146,7 @@ namespace ts {
146146 const silentNeverType = createIntrinsicType(TypeFlags.Never, "never");
147147
148148 const emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
149+ const nonPrimitiveType = createNonPrimitiveType();
149150
150151 const emptyTypeLiteralSymbol = createSymbol(SymbolFlags.TypeLiteral | SymbolFlags.Transient, "__type");
151152 emptyTypeLiteralSymbol.members = createMap<Symbol>();
@@ -1684,6 +1685,14 @@ namespace ts {
16841685 return type;
16851686 }
16861687
1688+ function createNonPrimitiveType(): NonPrimitiveType {
1689+ const type = <NonPrimitiveType>setStructuredTypeMembers(
1690+ createObjectType(ObjectFlags.NonPrimitive, undefined),
1691+ emptySymbols, emptyArray, emptyArray, undefined, undefined);
1692+ type.intrinsicName = "object";
1693+ return type;
1694+ }
1695+
16871696 function createObjectType(objectFlags: ObjectFlags, symbol?: Symbol): ObjectType {
16881697 const type = <ObjectType>createType(TypeFlags.Object);
16891698 type.objectFlags = objectFlags;
@@ -4178,6 +4187,7 @@ namespace ts {
41784187 case SyntaxKind.NumberKeyword:
41794188 case SyntaxKind.BooleanKeyword:
41804189 case SyntaxKind.SymbolKeyword:
4190+ case SyntaxKind.ObjectKeyword:
41814191 case SyntaxKind.VoidKeyword:
41824192 case SyntaxKind.UndefinedKeyword:
41834193 case SyntaxKind.NullKeyword:
@@ -6384,6 +6394,8 @@ namespace ts {
63846394 return nullType;
63856395 case SyntaxKind.NeverKeyword:
63866396 return neverType;
6397+ case SyntaxKind.ObjectKeyword:
6398+ return nonPrimitiveType;
63876399 case SyntaxKind.JSDocNullKeyword:
63886400 return nullType;
63896401 case SyntaxKind.JSDocUndefinedKeyword:
@@ -7139,6 +7151,7 @@ namespace ts {
71397151 if (source.flags & TypeFlags.Enum && target.flags & TypeFlags.Enum && isEnumTypeRelatedTo(<EnumType>source, <EnumType>target, errorReporter)) return true;
71407152 if (source.flags & TypeFlags.Undefined && (!strictNullChecks || target.flags & (TypeFlags.Undefined | TypeFlags.Void))) return true;
71417153 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;
71427155 if (relation === assignableRelation || relation === comparableRelation) {
71437156 if (source.flags & TypeFlags.Any) return true;
71447157 if ((source.flags & TypeFlags.Number | source.flags & TypeFlags.NumberLiteral) && target.flags & TypeFlags.EnumLike) return true;
0 commit comments