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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
// 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 中的文件。

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

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

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

然后修改 launch.json 中的 runtimeArgs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
// 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",
}
]
}

问题就解决了。