(node)
| 80094 | } |
| 80095 | } |
| 80096 | function checkTypePredicate(node) { |
| 80097 | var parent = getTypePredicateParent(node); |
| 80098 | if (!parent) { |
| 80099 | // The parent must not be valid. |
| 80100 | error(node, ts.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods); |
| 80101 | return; |
| 80102 | } |
| 80103 | var signature = getSignatureFromDeclaration(parent); |
| 80104 | var typePredicate = getTypePredicateOfSignature(signature); |
| 80105 | if (!typePredicate) { |
| 80106 | return; |
| 80107 | } |
| 80108 | checkSourceElement(node.type); |
| 80109 | var parameterName = node.parameterName; |
| 80110 | if (typePredicate.kind === 0 /* TypePredicateKind.This */ || typePredicate.kind === 2 /* TypePredicateKind.AssertsThis */) { |
| 80111 | getTypeFromThisTypeNode(parameterName); |
| 80112 | } |
| 80113 | else { |
| 80114 | if (typePredicate.parameterIndex >= 0) { |
| 80115 | if (signatureHasRestParameter(signature) && typePredicate.parameterIndex === signature.parameters.length - 1) { |
| 80116 | error(parameterName, ts.Diagnostics.A_type_predicate_cannot_reference_a_rest_parameter); |
| 80117 | } |
| 80118 | else { |
| 80119 | if (typePredicate.type) { |
| 80120 | var leadingError = function () { return ts.chainDiagnosticMessages(/*details*/ undefined, ts.Diagnostics.A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type); }; |
| 80121 | checkTypeAssignableTo(typePredicate.type, getTypeOfSymbol(signature.parameters[typePredicate.parameterIndex]), node.type, |
| 80122 | /*headMessage*/ undefined, leadingError); |
| 80123 | } |
| 80124 | } |
| 80125 | } |
| 80126 | else if (parameterName) { |
| 80127 | var hasReportedError = false; |
| 80128 | for (var _i = 0, _a = parent.parameters; _i < _a.length; _i++) { |
| 80129 | var name = _a[_i].name; |
| 80130 | if (ts.isBindingPattern(name) && |
| 80131 | checkIfTypePredicateVariableIsDeclaredInBindingPattern(name, parameterName, typePredicate.parameterName)) { |
| 80132 | hasReportedError = true; |
| 80133 | break; |
| 80134 | } |
| 80135 | } |
| 80136 | if (!hasReportedError) { |
| 80137 | error(node.parameterName, ts.Diagnostics.Cannot_find_parameter_0, typePredicate.parameterName); |
| 80138 | } |
| 80139 | } |
| 80140 | } |
| 80141 | } |
| 80142 | function getTypePredicateParent(node) { |
| 80143 | switch (node.parent.kind) { |
| 80144 | case 214 /* SyntaxKind.ArrowFunction */: |
no test coverage detected
searching dependent graphs…