【问题标题】:Go to the TypeScript source file instead of the type definition file in VS Code转到 TypeScript 源文件,而不是 VS Code 中的类型定义文件
【发布时间】:2018-07-20 12:47:19
【问题描述】:

我创建了一个自定义的npm 库,用于一些根项目。这个库是用 TypeScript 编写的。所有来源都在/src 文件夹下。

库的tsconfig.json 包含这些编译器选项:

"sourceMap": true
"outDir": "dist"

package.json 文件包含:

"main": "dist/src/index.js",
"typings": "dist/src",
"files": [
  "src",
  "dist"
],

最后,生成的包包含生成的.js文件、d.ts文件和.ts源文件:

- package.json
- /dist (`.js` and `d.ts` files)
- /src (`.ts` files)

在已安装此自定义库的根项目中,然后我可以在调用从库中导入的函数的行上添加断点并单步执行以调试其代码,所有这些都在 TypeScript 中。这太棒了!

但是,在 Visual Studio Code 中,当我按住 CTRL 键单击从库中导入的函数时,不进行调试,它会将我 引导至 d.ts 类型定义文件。我希望它能够将引导至.ts 源文件!目前的情况,如果我需要查看实际的源代码,我必须自己浏览到库的/src 文件夹,在/node_modules 下。

有没有办法在 VSCode 中直接进入 TypeScript 源文件,而不是类型定义文件?

【问题讨论】:

    标签: node.js typescript npm visual-studio-code


    【解决方案1】:

    当您调试时,您实际上会陷入具有源映射的实际 js。所以,你觉得自己喜欢打字稿源。

    但是 TypeScript 和 VSCode 对库的来源一无所知。当 TypeScript 查找导入的库时,它会搜索 package.json,然后查找“typings”字段,并使用那里指定的文件。

    有一个原因,为什么库为 TypeScript 提供 d.ts 和 .js,而不是源代码本身。如果库会提供源代码,那么您将需要编译它们。这很奇怪而且效率不高,因为:

    1. 库的每个用户都会烧毁他们的处理器来编译他所依赖的所有库。
    2. 用户将在编译期间更改 node_modules 的内容
    3. 用户将获得a problem like this

    这就是为什么,所有发布的库都已经编译为 js,并带有 .d.ts 声明。

    如果您真的想查看库源(顺便说一句,为了什么?),只需将库源复制到您的 src 目录,然后将其从依赖项中删除。

    【讨论】:

    • 我可能想查看库源代码的原因有很多。首先想到的是函数是否为async 并使用await 调用。在这种情况下,我需要转到源文件在函数内设置断点,因为调试时“步入”不会直接进入函数。我可能也只是想看看我要调用的代码!
    • 对外部库设置断点并调查其代码在我看来是不正常的。如果库需要探索其代码,那么它的 API 思想很糟糕。
    • 我发现我想看看库是如何经常(以及其他时间)实现的,特别是在库可扩展的情况下,我想看看现有选项是如何实现的。 (昨天我和 Jest 一起想到了这个:jestjs.io/docs/en/expect#expectextendmatchers,例如。)
    【解决方案2】:

    在配置中设置disableAutomaticTypeAcquisition: true

    【讨论】:

    • 这就是解决方案。我怀疑它是否会起作用,因为我认为类型已经被获取,但它在重新启动后起作用。切里奥
    • 这需要在 vscode 设置中完成,而不是 tsconfig。此外,这不适用于我的用例,我有手写类型定义文件
    【解决方案3】:

    从 Typescript 2.9 开始,可以使用 declarationMap 标志编译您的库

    ./node_modules/typescript/bin/tsc -p . --declarationMap
    

    这样做会创建一个声明映射文件 (dist/ActionApi.d.ts.map) 并在相应 d.ts 文件的底部创建一个映射链接

    //# sourceMappingURL=ActionApi.d.ts.map
    

    当 VSCodes 遇到这样的 declarationMap 时,它会知道去哪里并直接将您引导至源代码。

    【讨论】:

    • 太棒了!!我们将"declarationMap": true 添加到tsconfig.json,它确实有效...谢谢!
    • 以 index.d.ts 和 jsconfig.json 为根的 javascript 节点模块怎么样?有没有办法添加声明图?我有兴趣调试 odic-client 模块 github.com/IdentityModel/oidc-client-js
    • 仅供参考,我正在手动添加类型定义文件,并使用 tsconfig 对这些文件进行类型检查,这不适用于我的用例
    • 这似乎不适用于链接包。
    猜你喜欢
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 2021-01-05
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多