diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index bac1811f429..54202322260 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -1682,7 +1682,8 @@ namespace ts.FindAllReferences.Core { function isImplementation(node: Node): boolean { return !!(node.flags & NodeFlags.Ambient) - || (isVariableLike(node) ? hasInitializer(node) + ? !(isInterfaceDeclaration(node) || isTypeAliasDeclaration(node)) + : (isVariableLike(node) ? hasInitializer(node) : isFunctionLikeDeclaration(node) ? !!node.body : isClassLike(node) || isModuleOrEnumDeclaration(node)); } diff --git a/tests/cases/fourslash/goToImplementationInterface_09.ts b/tests/cases/fourslash/goToImplementationInterface_09.ts new file mode 100644 index 00000000000..5706dea5bb6 --- /dev/null +++ b/tests/cases/fourslash/goToImplementationInterface_09.ts @@ -0,0 +1,12 @@ +/// + +// Should go to object literals within cast expressions when invoked on interface + +// @Filename: def.d.ts +//// export interface Interface { P: number } + +// @Filename: ref.ts +//// import { Interface } from "./def"; +//// const c: I/*ref*/nterface = [|{ P: 2 }|]; + +verify.allRangesAppearInImplementationList("ref"); \ No newline at end of file diff --git a/tests/cases/fourslash/goToImplementationTypeAlias_00.ts b/tests/cases/fourslash/goToImplementationTypeAlias_00.ts new file mode 100644 index 00000000000..6eb997c2a8a --- /dev/null +++ b/tests/cases/fourslash/goToImplementationTypeAlias_00.ts @@ -0,0 +1,12 @@ +/// + +// Should go to object literals within cast expressions when invoked on interface + +// @Filename: def.d.ts +//// export type TypeAlias = { P: number } + +// @Filename: ref.ts +//// import { TypeAlias } from "./def"; +//// const c: T/*ref*/ypeAlias = [|{ P: 2 }|]; + +verify.allRangesAppearInImplementationList("ref"); \ No newline at end of file