@@ -148,6 +148,7 @@ namespace ts {
148
148
const voidType = createIntrinsicType(TypeFlags.Void, "void");
149
149
const neverType = createIntrinsicType(TypeFlags.Never, "never");
150
150
const silentNeverType = createIntrinsicType(TypeFlags.Never, "never");
151
+ const nonPrimitiveType = createIntrinsicType(TypeFlags.NonPrimitive, "object");
151
152
152
153
const emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
153
154
@@ -4196,6 +4197,7 @@ namespace ts {
4196
4197
case SyntaxKind.NumberKeyword:
4197
4198
case SyntaxKind.BooleanKeyword:
4198
4199
case SyntaxKind.SymbolKeyword:
4200
+ case SyntaxKind.ObjectKeyword:
4199
4201
case SyntaxKind.VoidKeyword:
4200
4202
case SyntaxKind.UndefinedKeyword:
4201
4203
case SyntaxKind.NullKeyword:
@@ -4780,6 +4782,7 @@ namespace ts {
4780
4782
t.flags & TypeFlags.NumberLike ? globalNumberType :
4781
4783
t.flags & TypeFlags.BooleanLike ? globalBooleanType :
4782
4784
t.flags & TypeFlags.ESSymbol ? getGlobalESSymbolType() :
4785
+ t.flags & TypeFlags.NonPrimitive ? globalObjectType :
4783
4786
t;
4784
4787
}
4785
4788
@@ -6405,6 +6408,8 @@ namespace ts {
6405
6408
return nullType;
6406
6409
case SyntaxKind.NeverKeyword:
6407
6410
return neverType;
6411
+ case SyntaxKind.ObjectKeyword:
6412
+ return nonPrimitiveType;
6408
6413
case SyntaxKind.JSDocNullKeyword:
6409
6414
return nullType;
6410
6415
case SyntaxKind.JSDocUndefinedKeyword:
@@ -7162,6 +7167,8 @@ namespace ts {
7162
7167
if (source.flags & TypeFlags.Enum && target.flags & TypeFlags.Enum && isEnumTypeRelatedTo(<EnumType>source, <EnumType>target, errorReporter)) return true;
7163
7168
if (source.flags & TypeFlags.Undefined && (!strictNullChecks || target.flags & (TypeFlags.Undefined | TypeFlags.Void))) return true;
7164
7169
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;
7165
7172
if (relation === assignableRelation || relation === comparableRelation) {
7166
7173
if (source.flags & TypeFlags.Any) return true;
7167
7174
if ((source.flags & TypeFlags.Number | source.flags & TypeFlags.NumberLiteral) && target.flags & TypeFlags.EnumLike) return true;
@@ -9235,6 +9242,9 @@ namespace ts {
9235
9242
}
9236
9243
9237
9244
function getTypeFacts(type: Type): TypeFacts {
9245
+ if (type === nonPrimitiveType) {
9246
+ return strictNullChecks ? TypeFacts.ObjectStrictFacts : TypeFacts.ObjectFacts;
9247
+ }
9238
9248
const flags = type.flags;
9239
9249
if (flags & TypeFlags.String) {
9240
9250
return strictNullChecks ? TypeFacts.StringStrictFacts : TypeFacts.StringFacts;
@@ -18159,6 +18169,7 @@ namespace ts {
18159
18169
case "string":
18160
18170
case "symbol":
18161
18171
case "void":
18172
+ case "object":
18162
18173
error(name, message, (<Identifier>name).text);
18163
18174
}
18164
18175
}
0 commit comments