首页 > 解决方案 > 命名导出的“转到定义”在 JavaScript 和 TypeScript 之间的工作方式不同?

问题描述

给定这样的文件结构:

├── main.js
└── util
    └── stuff.js

还有一些内容是这样的:

// stuff.js
export function add(a, b) {
    return a + b;
}

// main.js
import * as maths from './util/stuff.js'

maths.add(1, 2)

当我尝试对.add()main.js 中的调用使用 Go To Definition 时,我能够看到函数签名以及 JSDoc 中用于代码完成和类型检查的任何类型。但是,当我尝试对其进行“转到定义”时,我会永远在窗口顶部看到加载动画。默认导出似乎没有这个问题。

我想我会看看这是否也发生在实际的 TypeScript 项目中,但是将文件重命名为 .ts 会使 Go To Definition 按预期工作。尽管已经知道 JSDoc,但语言服务器是否存在阻止它在 .js 文件时工作的东西?作为参考,这是我现在拥有的 jsconfig.json:

{
    "compilerOptions": {
        "target": "es6",
        "module": "commonjs",
        "baseUrl": ".",
        "paths": {
            "@base/*": ["base/*"],
            "@test/*": ["test/*"]
        },
        "checkJs": true,
        "jsx": "preserve"
    },
    "exclude": ["node_modules", "**/node_modules"]
}

我已经尝试将module选项切换到es2015并且esnext只是为了确保它不是导致问题的选项。

标签: javascripttypescriptvisual-studio-codego-to-definition

解决方案


推荐阅读