@@ -148,6 +148,7 @@ namespace ts {
148148 const voidType = createIntrinsicType(TypeFlags.Void, "void");
149149 const neverType = createIntrinsicType(TypeFlags.Never, "never");
150150 const silentNeverType = createIntrinsicType(TypeFlags.Never, "never");
151+ const nonPrimitiveType = createIntrinsicType(TypeFlags.NonPrimitive, "object");
151152
152153 const emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
153154
@@ -4196,6 +4197,7 @@ namespace ts {
41964197 case SyntaxKind.NumberKeyword:
41974198 case SyntaxKind.BooleanKeyword:
41984199 case SyntaxKind.SymbolKeyword:
4200+ case SyntaxKind.ObjectKeyword:
41994201 case SyntaxKind.VoidKeyword:
42004202 case SyntaxKind.UndefinedKeyword:
42014203 case SyntaxKind.NullKeyword:
@@ -4780,6 +4782,7 @@ namespace ts {
47804782 t.flags & TypeFlags.NumberLike ? globalNumberType :
47814783 t.flags & TypeFlags.BooleanLike ? globalBooleanType :
47824784 t.flags & TypeFlags.ESSymbol ? getGlobalESSymbolType() :
4785+ t.flags & TypeFlags.NonPrimitive ? globalObjectType :
47834786 t;
47844787 }
47854788
@@ -6405,6 +6408,8 @@ namespace ts {
64056408 return nullType;
64066409 case SyntaxKind.NeverKeyword:
64076410 return neverType;
6411+ case SyntaxKind.ObjectKeyword:
6412+ return nonPrimitiveType;
64086413 case SyntaxKind.JSDocNullKeyword:
64096414 return nullType;
64106415 case SyntaxKind.JSDocUndefinedKeyword:
@@ -7162,6 +7167,8 @@ namespace ts {
71627167 if (source.flags & TypeFlags.Enum && target.flags & TypeFlags.Enum && isEnumTypeRelatedTo(<EnumType>source, <EnumType>target, errorReporter)) return true;
71637168 if (source.flags & TypeFlags.Undefined && (!strictNullChecks || target.flags & (TypeFlags.Undefined | TypeFlags.Void))) return true;
71647169 if (source.flags & TypeFlags.Null && (!strictNullChecks || target.flags & TypeFlags.Null)) return true;
7170+ if (source.flags & TypeFlags.Object && target === nonPrimitiveType) return true;
7171+ if (source.flags & TypeFlags.Primitive && target === nonPrimitiveType) return false;
71657172 if (relation === assignableRelation || relation === comparableRelation) {
71667173 if (source.flags & TypeFlags.Any) return true;
71677174 if ((source.flags & TypeFlags.Number | source.flags & TypeFlags.NumberLiteral) && target.flags & TypeFlags.EnumLike) return true;
@@ -9235,6 +9242,9 @@ namespace ts {
92359242 }
92369243
92379244 function getTypeFacts(type: Type): TypeFacts {
9245+ if (type === nonPrimitiveType) {
9246+ return strictNullChecks ? TypeFacts.ObjectStrictFacts : TypeFacts.ObjectFacts;
9247+ }
92389248 const flags = type.flags;
92399249 if (flags & TypeFlags.String) {
92409250 return strictNullChecks ? TypeFacts.StringStrictFacts : TypeFacts.StringFacts;
@@ -18159,6 +18169,7 @@ namespace ts {
1815918169 case "string":
1816018170 case "symbol":
1816118171 case "void":
18172+ case "object":
1816218173 error(name, message, (<Identifier>name).text);
1816318174 }
1816418175 }
0 commit comments