TypeScript cmd+click function name goes to type definition file instead of source

au9on6nz  于 4个月前  发布在  TypeScript
关注(0)|答案(5)|浏览(44)

重复的microsoft/vscode#68782,但它在没有修复的情况下被关闭了。

  • VSCode版本:1.41.1
  • 操作系统版本:macOS 10.14.6

重现步骤:

  1. 创建一个包含2个文件的项目文件夹:
    lib.js
export const testMethod = (name, params) => {
  params && params.age
    ? `hello ${name} with age: ${params.age}`
    : `hello ${name}`;
};

test.js

import { testMethod } from "./lib";
testMethod("foo", { age: 3 });

使用cmd+click可以正常工作并跳转到定义。

现在添加一个类型定义文件
lib.d.ts

declare namespace MyModule {
  interface IParams {
    age: number;
  }

  function testMethod(name: string, params: IParams): string;
}
export = MyModule;

使用cmd+click跳转到类型定义而不是源代码定义。

我认为这不是默认行为。我希望cmd+click能带我到函数定义。

pexxcrt2

pexxcrt21#

这至少是TS文件的设计行为。
手写d.ts文件为已有代码的js文件是一种奇怪的情况。对于具有生成定义的TS项目,解决方案是使用声明Map,以便工具可以从类型定义Map回实现。

zpjtge22

zpjtge222#

手写d.ts文件对于已经有代码的js文件来说是一种奇怪的情况。我认为这实际上是一个非常常见的情况,想想所有有d.ts文件的纯js库。在我看来,应该有一种方法可以跳转到任何一个定义文件或者完全忽略定义文件并跳转到源代码。

trnvg8h3

trnvg8h33#

从建筑学的Angular 来看,这对我们来说是一个跳跃。如果有一个 .d.ts 文件,我们甚至不会寻找 .js ,也不会意识到还有另一个选项可以去。如果我们确实决定基于反馈认为这是值得投资的,就需要有一个单独的动词,这样我们就不会花很多时间尝试加载用户不感兴趣的JS文件。

wkftcu5l

wkftcu5l4#

我认为这种方法是有道理的!当然,我们不希望让对这个功能不感兴趣的用户感到不便。
话虽如此,我相信还是会有很多用户对此功能感兴趣。
感谢回复!

js5cn81o

js5cn81o5#

在声明文件中定义了所有的抽象接口,我们大部分时间不需要关心实现。但是有时候,如果我们想要检查或怀疑某个底层的东西,我们会感到沮丧。你们有没有过类似的沮丧经历,然后尝试从所有项目文件中搜索?

因此,从一个VS Code用户的Angular 来看,我真的希望有一个这样的选项。

附注:declarationMap可能是这个时刻的一个理想解决方案,因为JavaScript生态系统中缺乏map文件,例如DefinitelyTyped。

相关问题