@@ -170,7 +170,7 @@ var ts;
170
170
var ts;
171
171
(function (ts) {
172
172
ts.versionMajorMinor = "2.8";
173
- ts.version = ts.versionMajorMinor + ".2 ";
173
+ ts.version = ts.versionMajorMinor + ".3 ";
174
174
})(ts || (ts = {}));
175
175
(function (ts) {
176
176
function isExternalModuleNameRelative(moduleName) {
@@ -21926,6 +21926,9 @@ var ts;
21926
21926
if (initializer) {
21927
21927
namespace = getSymbolOfNode(initializer);
21928
21928
}
21929
+ if (!namespace) {
21930
+ return undefined;
21931
+ }
21929
21932
if (namespace.valueDeclaration &&
21930
21933
ts.isVariableDeclaration(namespace.valueDeclaration) &&
21931
21934
namespace.valueDeclaration.initializer &&
@@ -25267,14 +25270,22 @@ var ts;
25267
25270
return baseObjectType || baseIndexType ? getIndexedAccessType(baseObjectType || type.objectType, baseIndexType || type.indexType) : undefined;
25268
25271
}
25269
25272
function getDefaultConstraintOfConditionalType(type) {
25270
- return getUnionType([getTrueTypeFromConditionalType(type), getFalseTypeFromConditionalType(type)]);
25273
+ if (!type.resolvedDefaultConstraint) {
25274
+ var rootTrueType = type.root.trueType;
25275
+ var rootTrueConstraint = rootTrueType.flags & 4194304 ? rootTrueType.substitute : rootTrueType;
25276
+ type.resolvedDefaultConstraint = getUnionType([instantiateType(rootTrueConstraint, type.combinedMapper || type.mapper), getFalseTypeFromConditionalType(type)]);
25277
+ }
25278
+ return type.resolvedDefaultConstraint;
25271
25279
}
25272
25280
function getConstraintOfDistributiveConditionalType(type) {
25273
25281
if (type.root.isDistributive) {
25274
25282
var constraint = getConstraintOfType(type.checkType);
25275
25283
if (constraint) {
25276
25284
var mapper = createTypeMapper([type.root.checkType], [constraint]);
25277
- return getConditionalTypeInstantiation(type, combineTypeMappers(mapper, type.mapper));
25285
+ var instantiated = getConditionalTypeInstantiation(type, combineTypeMappers(mapper, type.mapper));
25286
+ if (!(instantiated.flags & 16384)) {
25287
+ return instantiated;
25288
+ }
25278
25289
}
25279
25290
}
25280
25291
return undefined;
@@ -26207,7 +26218,7 @@ var ts;
26207
26218
}
26208
26219
function getConstrainedTypeVariable(typeVariable, node) {
26209
26220
var constraints;
26210
- while (ts.isPartOfTypeNode (node)) {
26221
+ while (node && ! ts.isStatement (node)) {
26211
26222
var parent = node.parent;
26212
26223
if (parent.kind === 170 && node === parent.trueType) {
26213
26224
var constraint = getImpliedConstraint(typeVariable, parent.checkType, parent.extendsType);
@@ -26757,12 +26768,16 @@ var ts;
26757
26768
}
26758
26769
return links.resolvedType;
26759
26770
}
26760
- function getIndexTypeForGenericType(type) {
26761
- if (!type.resolvedIndexType) {
26762
- type.resolvedIndexType = createType(524288);
26763
- type.resolvedIndexType.type = type;
26771
+ function getIndexTypeForGenericType(type, includeDeclaredTypes) {
26772
+ var cacheLocation = includeDeclaredTypes ? "resolvedDeclaredIndexType" : "resolvedIndexType";
26773
+ if (!type[cacheLocation]) {
26774
+ type[cacheLocation] = createType(524288);
26775
+ type[cacheLocation].type = type;
26776
+ if (includeDeclaredTypes) {
26777
+ type[cacheLocation].isDeclaredType = true;
26778
+ }
26764
26779
}
26765
- return type.resolvedIndexType ;
26780
+ return type[cacheLocation] ;
26766
26781
}
26767
26782
function getLiteralTypeFromPropertyName(prop) {
26768
26783
var links = getSymbolLinks(getLateBoundSymbol(prop));
@@ -26778,16 +26793,20 @@ var ts;
26778
26793
}
26779
26794
return links.nameType;
26780
26795
}
26781
- function getLiteralTypeFromPropertyNames (type) {
26782
- return getUnionType(ts.map(getPropertiesOfType( type), getLiteralTypeFromPropertyName) );
26796
+ function isTypeString (type) {
26797
+ return isTypeAssignableToKind( type, 524322 );
26783
26798
}
26784
- function getIndexType(type) {
26785
- return type.flags & 262144 ? getUnionType(ts.map(type.types, function (t) { return getIndexType(t); })) :
26786
- maybeTypeOfKind(type, 7372800) ? getIndexTypeForGenericType(type) :
26799
+ function getLiteralTypeFromPropertyNames(type, includeDeclaredTypes) {
26800
+ var originalKeys = ts.map(getPropertiesOfType(type), getLiteralTypeFromPropertyName);
26801
+ return getUnionType(includeDeclaredTypes ? originalKeys : ts.filter(originalKeys, isTypeString));
26802
+ }
26803
+ function getIndexType(type, includeDeclaredTypes) {
26804
+ return type.flags & 262144 ? getUnionType(ts.map(type.types, function (t) { return getIndexType(t, includeDeclaredTypes); })) :
26805
+ maybeTypeOfKind(type, 7372800) ? getIndexTypeForGenericType(type, includeDeclaredTypes) :
26787
26806
ts.getObjectFlags(type) & 32 ? getConstraintTypeFromMappedType(type) :
26788
26807
type === wildcardType ? wildcardType :
26789
26808
type.flags & 1 || getIndexInfoOfType(type, 0) ? stringType :
26790
- getLiteralTypeFromPropertyNames(type);
26809
+ getLiteralTypeFromPropertyNames(type, includeDeclaredTypes );
26791
26810
}
26792
26811
function getIndexTypeOrString(type) {
26793
26812
var indexType = getIndexType(type);
@@ -27000,13 +27019,16 @@ var ts;
27000
27019
if (checkType === wildcardType || extendsType === wildcardType) {
27001
27020
return wildcardType;
27002
27021
}
27003
- if (!root.isDistributive || !maybeTypeOfKind(checkType, 7897088)) {
27004
- var combinedMapper = void 0;
27005
- if (root.inferTypeParameters) {
27006
- var context = createInferenceContext(root.inferTypeParameters, undefined, 0);
27022
+ var isDeferred = root.isDistributive && maybeTypeOfKind(checkType, 7897088);
27023
+ var combinedMapper;
27024
+ if (root.inferTypeParameters) {
27025
+ var context = createInferenceContext(root.inferTypeParameters, undefined, 0);
27026
+ if (!isDeferred) {
27007
27027
inferTypes(context.inferences, checkType, extendsType, 32 | 64);
27008
- combinedMapper = combineTypeMappers(mapper, context);
27009
27028
}
27029
+ combinedMapper = combineTypeMappers(mapper, context);
27030
+ }
27031
+ if (!isDeferred) {
27010
27032
if (checkType.flags & 1) {
27011
27033
return getUnionType([instantiateType(root.trueType, combinedMapper || mapper), instantiateType(root.falseType, mapper)]);
27012
27034
}
@@ -27024,6 +27046,7 @@ var ts;
27024
27046
result.checkType = erasedCheckType;
27025
27047
result.extendsType = extendsType;
27026
27048
result.mapper = mapper;
27049
+ result.combinedMapper = combinedMapper;
27027
27050
result.aliasSymbol = root.aliasSymbol;
27028
27051
result.aliasTypeArguments = instantiateTypes(root.aliasTypeArguments, mapper);
27029
27052
return result;
@@ -27045,13 +27068,27 @@ var ts;
27045
27068
}
27046
27069
return result;
27047
27070
}
27071
+ function isPossiblyReferencedInConditionalType(tp, node) {
27072
+ if (isTypeParameterPossiblyReferenced(tp, node)) {
27073
+ return true;
27074
+ }
27075
+ while (node) {
27076
+ if (node.kind === 170) {
27077
+ if (isTypeParameterPossiblyReferenced(tp, node.extendsType)) {
27078
+ return true;
27079
+ }
27080
+ }
27081
+ node = node.parent;
27082
+ }
27083
+ return false;
27084
+ }
27048
27085
function getTypeFromConditionalTypeNode(node) {
27049
27086
var links = getNodeLinks(node);
27050
27087
if (!links.resolvedType) {
27051
27088
var checkType = getTypeFromTypeNode(node.checkType);
27052
27089
var aliasTypeArguments = getAliasTypeArgumentsForTypeNode(node);
27053
27090
var allOuterTypeParameters = getOuterTypeParameters(node, true);
27054
- var outerTypeParameters = aliasTypeArguments ? allOuterTypeParameters : ts.filter(allOuterTypeParameters, function (tp) { return isTypeParameterPossiblyReferenced (tp, node); });
27091
+ var outerTypeParameters = aliasTypeArguments ? allOuterTypeParameters : ts.filter(allOuterTypeParameters, function (tp) { return isPossiblyReferencedInConditionalType (tp, node); });
27055
27092
var root = {
27056
27093
node: node,
27057
27094
checkType: checkType,
@@ -27507,6 +27544,10 @@ var ts;
27507
27544
}
27508
27545
return type;
27509
27546
}
27547
+ function maybeTypeParameterReference(node) {
27548
+ return !(node.kind === 145 ||
27549
+ node.parent.kind === 161 && node.parent.typeArguments && node === node.parent.typeName);
27550
+ }
27510
27551
function isTypeParameterPossiblyReferenced(tp, node) {
27511
27552
if (tp.symbol && tp.symbol.declarations && tp.symbol.declarations.length === 1) {
27512
27553
var container_2 = tp.symbol.declarations[0].parent;
@@ -27520,7 +27561,8 @@ var ts;
27520
27561
case 173:
27521
27562
return tp.isThisType;
27522
27563
case 71:
27523
- return !tp.isThisType && ts.isPartOfTypeNode(node) && getTypeFromTypeNode(node) === tp;
27564
+ return !tp.isThisType && ts.isPartOfTypeNode(node) && maybeTypeParameterReference(node) &&
27565
+ getTypeFromTypeNode(node) === tp;
27524
27566
case 164:
27525
27567
return true;
27526
27568
}
@@ -28481,7 +28523,7 @@ var ts;
28481
28523
}
28482
28524
var constraint = getConstraintForRelation(target.type);
28483
28525
if (constraint) {
28484
- if (result = isRelatedTo(source, getIndexType(constraint), reportErrors)) {
28526
+ if (result = isRelatedTo(source, getIndexType(constraint, target.isDeclaredType ), reportErrors)) {
28485
28527
return result;
28486
28528
}
28487
28529
}
@@ -36375,7 +36417,7 @@ var ts;
36375
36417
}
36376
36418
var objectType = type.objectType;
36377
36419
var indexType = type.indexType;
36378
- if (isTypeAssignableTo(indexType, getIndexType(objectType))) {
36420
+ if (isTypeAssignableTo(indexType, getIndexType(objectType, true ))) {
36379
36421
if (accessNode.kind === 184 && ts.isAssignmentTarget(accessNode) &&
36380
36422
ts.getObjectFlags(objectType) & 32 && getMappedTypeModifiers(objectType) & 1) {
36381
36423
error(accessNode, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType));
0 commit comments