diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c6f47a81781..1e332254502 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -11492,11 +11492,14 @@ namespace ts { return -1; } - function checkTypePredicate(node: TypePredicateNode) { + function checkTypePredicate(node: TypePredicateNode): void { const parent = getTypePredicateParent(node); if (!parent) { + // The parent must not be valid. + error(node.parent, Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods); return; } + const typePredicate = getSignatureFromDeclaration(parent).typePredicate; if (!typePredicate) { return; diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 1300b474ff3..dfa77ed82c0 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -715,6 +715,10 @@ "category": "Error", "code": 1227 }, + "A type predicate is only allowed in return type position for functions and methods.": { + "category": "Error", + "code": 1228 + }, "A type predicate cannot reference a rest parameter.": { "category": "Error", "code": 1229