TypeScript TS服务器:在.d.ts文件中查找所有引用,但未找到带有'import * as '的引用,

9wbgstp7  于 6个月前  发布在  TypeScript
关注(0)|答案(6)|浏览(44)

Bug报告

🔎 搜索词

🕗 版本与回归信息

typescript版本:4.6.2

⏯ Playground链接

💻 代码

文件结构
src/types.ts

export interface ITest {
  value: number;
}

src/types.declaration.d.ts

import * as types from "./types";
declare global {
  namespace ns {
    export { types };
  }
}

src/index.ts

const test: ns.types.ITest = {
  value: 1,
};

tsconfig.json

{
  "compilerOptions": {
    "rootDir": "./src/"
  }
}

🙁 实际行为

在vscode中,打开"src/index.ts",然后右键点击单词"ITest",它只会在"src/types.ts"中找到接口ITest声明;在"src/index.ts"中的引用无法找到。

🙂 预期行为

"Find All References"应该能找到"src/types.ts"中的接口ITest声明和"src/index.ts"中的引用。如果在文件"src/index.ts"的顶部添加'import * as _ from './types';',那么一切都会正常工作。

⭕️ 可能相关的问题

microsoft/vscode#106419

9w11ddsr

9w11ddsr1#

如果types不是重新导出(即在types.declaration.d.ts中内联声明),则该方法有效。(仅作说明,不提出缓解措施。)

ztmd8pv5

ztmd8pv52#

Also doesn't work with

import * as types from "./types";

export as namespace ns;
export { types };
k75qkfdt

k75qkfdt3#

嗯,直接原因是getSymbolScope不知道这个符号是全局的,所以它没有将index.ts包含在搜索集合中。如果你硬编码一个全局搜索,它可以正常工作(因为index.ts显然有一个文本匹配,GTD在这个匹配上工作)。

hgqdbh6s

hgqdbh6s4#

请让RyanCavanaugh确认此代码是否合法。

ars1skjm

ars1skjm5#

嗯,直接原因是getSymbolScope不知道这个符号是全局的,所以它没有将index.ts包含在搜索集中。如果你硬编码一个全局搜索,它可以正常工作(因为index.ts显然有一个文本匹配,GTD在这个匹配上工作)。

@amcasey
感谢你的调查。我明白你的意思,但是为什么当我在文件"src/index.ts"的顶部添加'import * as _ from './types';'时,它可以正常工作?这个语句会让index.ts被包含在全局范围内吗?

fhg3lkii

fhg3lkii6#

@xusd320 在没有调试它的情况下,我的猜测是导入足以将index.ts包含在感兴趣的文件列表中,此时文件内的所有匹配项都被视为范围内。

相关问题