VSCode 调试 TypeScript 文件时不识别 d.ts 定义文件问题解决

VSCode 在调试 TypeScript 文件时,使用的 ts-node,会出现不识别全局定义文件的问题。

使用 ts-node 可以在 VSCode 中直接调试 TypeScript 文件,只需要在 launch.json 中配置:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Current TS File",
            "type": "node",
            "request": "launch",
            "args": ["${relativeFile}"],
            "runtimeArgs": ["-r", "ts-node/register"],
            "cwd": "${workspaceRoot}",
            "protocol": "inspector",
            "internalConsoleOptions": "openOnSessionStart",
        }
    ]
}

然后只需要打开要调试的文件,摁 F5 就可以直接执行了。

但是如果在文件中使用了全局定义文件中定义的内容,interface 等,会在执行阶段报找不到定义的错误。

原因是 ts-node 在 7.0 版本以后默认不再加载 tsconfig.json 中的文件了: https://github.com/TypeStrong/ts-node/releases/tag/v7.0.0

我们需要手动设置 –files 选项来让 ts-node 加载 tsconfig.json 中的文件。

ts-node --files ./file/to/run.ts

然而在 launch.json 中,没找到怎么设置这个选项。解决办法是我们创建一个 ts-node.js 文件,在其中引入 ts-node,给他设置 files 为 true:

require('ts-node').register({ files: true });

然后修改 launch.json 中的 runtimeArgs:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Current TS File",
            "type": "node",
            "request": "launch",
            "args": ["${relativeFile}"],
            "runtimeArgs": ["-r", "./example/ts-node.js"],
            "cwd": "${workspaceRoot}",
            "protocol": "inspector",
            "internalConsoleOptions": "openOnSessionStart",
        }
    ]
}

问题就解决了。

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章