@@ -144,9 +144,9 @@ namespace ts {
144
144
const voidType = createIntrinsicType(TypeFlags.Void, "void");
145
145
const neverType = createIntrinsicType(TypeFlags.Never, "never");
146
146
const silentNeverType = createIntrinsicType(TypeFlags.Never, "never");
147
+ const nonPrimitiveType = createIntrinsicType(TypeFlags.NonPrimitive, "object");
147
148
148
149
const emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
149
- const nonPrimitiveType = createNonPrimitiveType();
150
150
151
151
const emptyTypeLiteralSymbol = createSymbol(SymbolFlags.TypeLiteral | SymbolFlags.Transient, "__type");
152
152
emptyTypeLiteralSymbol.members = createMap<Symbol>();
@@ -1662,13 +1662,6 @@ namespace ts {
1662
1662
return type;
1663
1663
}
1664
1664
1665
- function createNonPrimitiveType(): ResolvedType {
1666
- const type = setStructuredTypeMembers(
1667
- createObjectType(ObjectFlags.NonPrimitive, undefined),
1668
- emptySymbols, emptyArray, emptyArray, undefined, undefined);
1669
- return type;
1670
- }
1671
-
1672
1665
function createObjectType(objectFlags: ObjectFlags, symbol?: Symbol): ObjectType {
1673
1666
const type = <ObjectType>createType(TypeFlags.Object);
1674
1667
type.objectFlags = objectFlags;
@@ -2297,9 +2290,6 @@ namespace ts {
2297
2290
else if (type.flags & TypeFlags.UnionOrIntersection) {
2298
2291
writeUnionOrIntersectionType(<UnionOrIntersectionType>type, nextFlags);
2299
2292
}
2300
- else if (getObjectFlags(type) & ObjectFlags.NonPrimitive) {
2301
- writer.writeKeyword("object");
2302
- }
2303
2293
else if (getObjectFlags(type) & (ObjectFlags.Anonymous | ObjectFlags.Mapped)) {
2304
2294
writeAnonymousType(<ObjectType>type, nextFlags);
2305
2295
}
@@ -4748,6 +4738,7 @@ namespace ts {
4748
4738
t.flags & TypeFlags.NumberLike ? globalNumberType :
4749
4739
t.flags & TypeFlags.BooleanLike ? globalBooleanType :
4750
4740
t.flags & TypeFlags.ESSymbol ? getGlobalESSymbolType() :
4741
+ t.flags & TypeFlags.NonPrimitive ? globalObjectType :
4751
4742
t;
4752
4743
}
4753
4744
@@ -7122,6 +7113,8 @@ namespace ts {
7122
7113
if (source.flags & TypeFlags.Enum && target.flags & TypeFlags.Enum && isEnumTypeRelatedTo(<EnumType>source, <EnumType>target, errorReporter)) return true;
7123
7114
if (source.flags & TypeFlags.Undefined && (!strictNullChecks || target.flags & (TypeFlags.Undefined | TypeFlags.Void))) return true;
7124
7115
if (source.flags & TypeFlags.Null && (!strictNullChecks || target.flags & TypeFlags.Null)) return true;
7116
+ if (source.flags & TypeFlags.Object && target === nonPrimitiveType) return true;
7117
+ if (source.flags & TypeFlags.Primitive && target === nonPrimitiveType) return false;
7125
7118
if (relation === assignableRelation || relation === comparableRelation) {
7126
7119
if (source.flags & TypeFlags.Any) return true;
7127
7120
if ((source.flags & TypeFlags.Number | source.flags & TypeFlags.NumberLiteral) && target.flags & TypeFlags.EnumLike) return true;
@@ -7440,7 +7433,7 @@ namespace ts {
7440
7433
}
7441
7434
}
7442
7435
}
7443
- else if (!(source.flags & TypeFlags.Primitive && target === nonPrimitiveType)) {
7436
+ else {
7444
7437
if (getObjectFlags(source) & ObjectFlags.Reference && getObjectFlags(target) & ObjectFlags.Reference && (<TypeReference>source).target === (<TypeReference>target).target) {
7445
7438
// We have type references to same target type, see if relationship holds for all type arguments
7446
7439
if (result = typeArgumentsRelatedTo(<TypeReference>source, <TypeReference>target, reportErrors)) {
@@ -9190,6 +9183,9 @@ namespace ts {
9190
9183
}
9191
9184
9192
9185
function getTypeFacts(type: Type): TypeFacts {
9186
+ if (type === nonPrimitiveType) {
9187
+ return strictNullChecks ? TypeFacts.ObjectStrictFacts : TypeFacts.ObjectFacts;
9188
+ }
9193
9189
const flags = type.flags;
9194
9190
if (flags & TypeFlags.String) {
9195
9191
return strictNullChecks ? TypeFacts.StringStrictFacts : TypeFacts.StringFacts;
0 commit comments