@@ -4228,8 +4228,10 @@ namespace ts {
4228
4228
let returnTypeNode: TypeNode | undefined;
4229
4229
const typePredicate = getTypePredicateOfSignature(signature);
4230
4230
if (typePredicate) {
4231
- const assertsModifier = typePredicate.kind === TypePredicateKind.Assertion ? createToken(SyntaxKind.AssertsKeyword) : undefined;
4232
- const parameterName = typePredicate.kind !== TypePredicateKind.This ?
4231
+ const assertsModifier = typePredicate.kind === TypePredicateKind.AssertsThis || typePredicate.kind === TypePredicateKind.AssertsIdentifier ?
4232
+ createToken(SyntaxKind.AssertsKeyword) :
4233
+ undefined;
4234
+ const parameterName = typePredicate.kind === TypePredicateKind.Identifier || typePredicate.kind === TypePredicateKind.AssertsIdentifier ?
4233
4235
setEmitFlags(createIdentifier(typePredicate.parameterName), EmitFlags.NoAsciiEscaping) :
4234
4236
createThisTypeNode();
4235
4237
const typeNode = typePredicate.type && typeToTypeNodeHelper(typePredicate.type, context);
@@ -4702,8 +4704,8 @@ namespace ts {
4702
4704
4703
4705
function typePredicateToStringWorker(writer: EmitTextWriter) {
4704
4706
const predicate = createTypePredicateNode(
4705
- typePredicate.kind === TypePredicateKind.Assertion ? createToken(SyntaxKind.AssertsKeyword) : undefined,
4706
- typePredicate.kind !== TypePredicateKind.This ? createIdentifier(typePredicate.parameterName) : createThisTypeNode(),
4707
+ typePredicate.kind === TypePredicateKind.AssertsThis || typePredicate.kind === TypePredicateKind.AssertsIdentifier ? createToken(SyntaxKind.AssertsKeyword) : undefined,
4708
+ typePredicate.kind === TypePredicateKind.Identifier || typePredicate.kind === TypePredicateKind.AssertsIdentifier ? createIdentifier(typePredicate.parameterName) : createThisTypeNode(),
4707
4709
typePredicate.type && nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | NodeBuilderFlags.IgnoreErrors | NodeBuilderFlags.WriteTypeParametersInQualifiedName)! // TODO: GH#18217
4708
4710
);
4709
4711
const printer = createPrinter({ removeComments: true });
@@ -8721,8 +8723,8 @@ namespace ts {
8721
8723
const parameterName = node.parameterName;
8722
8724
const type = node.type && getTypeFromTypeNode(node.type);
8723
8725
return parameterName.kind === SyntaxKind.ThisType ?
8724
- createTypePredicate(TypePredicateKind.This, /*parameterName*/ undefined, /*parameterIndex*/ undefined, type) :
8725
- createTypePredicate(node.assertsModifier ? TypePredicateKind.Assertion : TypePredicateKind.Identifier, parameterName.escapedText as string,
8726
+ createTypePredicate(node.assertsModifier ? TypePredicateKind.AssertsThis : TypePredicateKind.This, /*parameterName*/ undefined, /*parameterIndex*/ undefined, type) :
8727
+ createTypePredicate(node.assertsModifier ? TypePredicateKind.AssertsIdentifier : TypePredicateKind.Identifier, parameterName.escapedText as string,
8726
8728
findIndex(signature.parameters, p => p.escapedName === parameterName.escapedText), type);
8727
8729
}
8728
8730
@@ -9829,7 +9831,7 @@ namespace ts {
9829
9831
const types: Type[] = [];
9830
9832
for (const sig of signatures) {
9831
9833
const pred = getTypePredicateOfSignature(sig);
9832
- if (!pred || pred.kind === TypePredicateKind.Assertion ) {
9834
+ if (!pred || pred.kind === TypePredicateKind.AssertsThis || pred.kind === TypePredicateKind.AssertsIdentifier ) {
9833
9835
continue;
9834
9836
}
9835
9837
@@ -12400,7 +12402,7 @@ namespace ts {
12400
12402
return Ternary.False;
12401
12403
}
12402
12404
12403
- if (source.kind !== TypePredicateKind.This ) {
12405
+ if (source.kind === TypePredicateKind.Identifier || source.kind === TypePredicateKind.AssertsIdentifier ) {
12404
12406
if (source.parameterIndex !== (target as IdentifierTypePredicate).parameterIndex) {
12405
12407
if (reportErrors) {
12406
12408
errorReporter!(Diagnostics.Parameter_0_is_not_in_the_same_position_as_parameter_1, source.parameterName, (target as IdentifierTypePredicate).parameterName);
@@ -17119,12 +17121,12 @@ namespace ts {
17119
17121
const signature = getEffectsSignature(flow.node);
17120
17122
if (signature) {
17121
17123
const predicate = getTypePredicateOfSignature(signature);
17122
- if (predicate && predicate.kind === TypePredicateKind.Assertion ) {
17124
+ if (predicate && ( predicate.kind === TypePredicateKind.AssertsThis || predicate.kind === TypePredicateKind.AssertsIdentifier) ) {
17123
17125
const flowType = getTypeAtFlowNode(flow.antecedent);
17124
17126
const type = getTypeFromFlowType(flowType);
17125
- const narrowedType = predicate.type ?
17126
- narrowTypeByTypePredicate (type, predicate, flow.node, /*assumeTrue*/ true ) :
17127
- narrowTypeByAssertion( type, flow.node.arguments[predicate.parameterIndex]) ;
17127
+ const narrowedType = predicate.type ? narrowTypeByTypePredicate(type, predicate, flow.node, /*assumeTrue*/ true) :
17128
+ predicate.kind === TypePredicateKind.AssertsIdentifier ? narrowTypeByAssertion (type, flow.node.arguments[predicate.parameterIndex] ) :
17129
+ type;
17128
17130
return narrowedType === type ? flowType : createFlowType(narrowedType, isIncomplete(flowType));
17129
17131
}
17130
17132
if (getReturnTypeOfSignature(signature).flags & TypeFlags.Never) {
@@ -17721,7 +17723,7 @@ namespace ts {
17721
17723
if (hasMatchingArgument(callExpression, reference)) {
17722
17724
const signature = getEffectsSignature(callExpression);
17723
17725
const predicate = signature && getTypePredicateOfSignature(signature);
17724
- if (predicate && predicate.kind !== TypePredicateKind.Assertion ) {
17726
+ if (predicate && ( predicate.kind === TypePredicateKind.This || predicate.kind === TypePredicateKind.Identifier) ) {
17725
17727
return narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue);
17726
17728
}
17727
17729
}
@@ -17733,7 +17735,7 @@ namespace ts {
17733
17735
if (isTypeAny(type) && (predicate.type === globalObjectType || predicate.type === globalFunctionType)) {
17734
17736
return type;
17735
17737
}
17736
- if (predicate.kind !== TypePredicateKind.This ) {
17738
+ if (predicate.kind === TypePredicateKind.Identifier || predicate.kind === TypePredicateKind.AssertsIdentifier ) {
17737
17739
const predicateArgument = callExpression.arguments[predicate.parameterIndex];
17738
17740
if (predicateArgument && predicate.type) {
17739
17741
if (isMatchingReference(reference, predicateArgument)) {
@@ -17746,7 +17748,7 @@ namespace ts {
17746
17748
}
17747
17749
else {
17748
17750
const invokedExpression = skipParentheses(callExpression.expression);
17749
- if (isAccessExpression(invokedExpression)) {
17751
+ if (isAccessExpression(invokedExpression) && predicate.type ) {
17750
17752
const possibleReference = skipParentheses(invokedExpression.expression);
17751
17753
if (isMatchingReference(reference, possibleReference)) {
17752
17754
return getNarrowedType(type, predicate.type, assumeTrue, isTypeSubtypeOf);
@@ -25501,7 +25503,7 @@ namespace ts {
25501
25503
checkSourceElement(node.type);
25502
25504
25503
25505
const { parameterName } = node;
25504
- if (isThisTypePredicate( typePredicate) ) {
25506
+ if (typePredicate.kind === TypePredicateKind.This || typePredicate.kind === TypePredicateKind.AssertsThis ) {
25505
25507
getTypeFromThisTypeNode(parameterName as ThisTypeNode);
25506
25508
}
25507
25509
else {
0 commit comments