diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 71aa2ce1a07..29ff56172f5 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -11925,6 +11925,10 @@ namespace ts { return resolveEntityName(entityName, meaning); } + if (entityName.parent.kind === SyntaxKind.TypePredicate) { + return resolveEntityName(entityName, /* meanings */ SymbolFlags.Variable); + } + // Do we want to return undefined here? return undefined; } diff --git a/tests/cases/fourslash/goToDefinitionTypePredicate.ts b/tests/cases/fourslash/goToDefinitionTypePredicate.ts new file mode 100644 index 00000000000..40f1d1eb94c --- /dev/null +++ b/tests/cases/fourslash/goToDefinitionTypePredicate.ts @@ -0,0 +1,16 @@ +/// + +//// /*classDeclaration*/class A {} +//// function f(/*parameterDeclaration*/parameter: any): /*parameterName*/parameter is /*typeReference*/A { +//// return typeof parameter === "string"; +//// } + +goTo.marker('parameterName'); + +goTo.definition(); +verify.caretAtMarker('parameterDeclaration'); + +goTo.marker('typeReference'); + +goTo.definition(); +verify.caretAtMarker('classDeclaration'); \ No newline at end of file