@@ -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>();
@@ -1685,13 +1685,6 @@ namespace ts {
1685
1685
return type;
1686
1686
}
1687
1687
1688
- function createNonPrimitiveType(): ResolvedType {
1689
- const type = setStructuredTypeMembers(
1690
- createObjectType(ObjectFlags.NonPrimitive, undefined),
1691
- emptySymbols, emptyArray, emptyArray, undefined, undefined);
1692
- return type;
1693
- }
1694
-
1695
1688
function createObjectType(objectFlags: ObjectFlags, symbol?: Symbol): ObjectType {
1696
1689
const type = <ObjectType>createType(TypeFlags.Object);
1697
1690
type.objectFlags = objectFlags;
@@ -2320,9 +2313,6 @@ namespace ts {
2320
2313
else if (type.flags & TypeFlags.UnionOrIntersection) {
2321
2314
writeUnionOrIntersectionType(<UnionOrIntersectionType>type, nextFlags);
2322
2315
}
2323
- else if (getObjectFlags(type) & ObjectFlags.NonPrimitive) {
2324
- writer.writeKeyword("object");
2325
- }
2326
2316
else if (getObjectFlags(type) & (ObjectFlags.Anonymous | ObjectFlags.Mapped)) {
2327
2317
writeAnonymousType(<ObjectType>type, nextFlags);
2328
2318
}
@@ -4771,6 +4761,7 @@ namespace ts {
4771
4761
t.flags & TypeFlags.NumberLike ? globalNumberType :
4772
4762
t.flags & TypeFlags.BooleanLike ? globalBooleanType :
4773
4763
t.flags & TypeFlags.ESSymbol ? getGlobalESSymbolType() :
4764
+ t.flags & TypeFlags.NonPrimitive ? globalObjectType :
4774
4765
t;
4775
4766
}
4776
4767
@@ -7153,6 +7144,8 @@ namespace ts {
7153
7144
if (source.flags & TypeFlags.Enum && target.flags & TypeFlags.Enum && isEnumTypeRelatedTo(<EnumType>source, <EnumType>target, errorReporter)) return true;
7154
7145
if (source.flags & TypeFlags.Undefined && (!strictNullChecks || target.flags & (TypeFlags.Undefined | TypeFlags.Void))) return true;
7155
7146
if (source.flags & TypeFlags.Null && (!strictNullChecks || target.flags & TypeFlags.Null)) return true;
7147
+ if (source.flags & TypeFlags.Object && target === nonPrimitiveType) return true;
7148
+ if (source.flags & TypeFlags.Primitive && target === nonPrimitiveType) return false;
7156
7149
if (relation === assignableRelation || relation === comparableRelation) {
7157
7150
if (source.flags & TypeFlags.Any) return true;
7158
7151
if ((source.flags & TypeFlags.Number | source.flags & TypeFlags.NumberLiteral) && target.flags & TypeFlags.EnumLike) return true;
@@ -7471,7 +7464,7 @@ namespace ts {
7471
7464
}
7472
7465
}
7473
7466
}
7474
- else if (!(source.flags & TypeFlags.Primitive && target === nonPrimitiveType)) {
7467
+ else {
7475
7468
if (getObjectFlags(source) & ObjectFlags.Reference && getObjectFlags(target) & ObjectFlags.Reference && (<TypeReference>source).target === (<TypeReference>target).target) {
7476
7469
// We have type references to same target type, see if relationship holds for all type arguments
7477
7470
if (result = typeArgumentsRelatedTo(<TypeReference>source, <TypeReference>target, reportErrors)) {
@@ -9224,6 +9217,9 @@ namespace ts {
9224
9217
}
9225
9218
9226
9219
function getTypeFacts(type: Type): TypeFacts {
9220
+ if (type === nonPrimitiveType) {
9221
+ return strictNullChecks ? TypeFacts.ObjectStrictFacts : TypeFacts.ObjectFacts;
9222
+ }
9227
9223
const flags = type.flags;
9228
9224
if (flags & TypeFlags.String) {
9229
9225
return strictNullChecks ? TypeFacts.StringStrictFacts : TypeFacts.StringFacts;
0 commit comments