MCPcopy Index your code
hub / github.com/nodejs/node / checkTypePredicate

Function checkTypePredicate

test/fixtures/snapshot/typescript.js:80096–80141  ·  view source on GitHub ↗
(node)

Source from the content-addressed store, hash-verified

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 */:

Callers 1

checkSourceElementWorkerFunction · 0.85

Calls 10

getTypePredicateParentFunction · 0.85
checkSourceElementFunction · 0.85
getTypeFromThisTypeNodeFunction · 0.85
checkTypeAssignableToFunction · 0.85
getTypeOfSymbolFunction · 0.85
errorFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…