ts-node 忽略 d.ts 文件,而 tsc 成功编译项目
ts-node ignores d.ts files while tsc successfully compiles the project
成功编译我的 TypeScript 项目后,我打算使用 ts-node
在 VS Code 的调试模式下 运行 它。问题是,ts-node
找不到我创建的 d.ts
个文件(而 tsc
没有问题)。
项目结构为:
/
conf/
dist/
src/
types/
package.json
tsconfig.json
tsconfig.json
相关条目是:
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
// "lib": [],
"sourceMap": true,
"outDir": "dist",
"rootDir": "src",
"moduleResolution": "node",
"baseUrl": ".",
"paths": {
"*": [
"node_modules/*",
"src/types/*"
]
},
// "rootDirs": [],
// "typeRoots": [],
// "types": [],
},
"include": [
"src/**/*"
]
}
定义文件ts-node
找不到是src/types/global.d.ts
:
import { App } from '../App';
declare global {
namespace NodeJS {
interface Global {
app: App;
}
}
}
所以,尝试 运行 它与 ts-node
我明白了:
TSError: ⨯ Unable to compile TypeScript:
src/boot.ts(15,59): error TS2339: Property 'app' does not exist on type 'Global'.
如何全局解决?我发现 /// <reference path="./types/global.d.ts" />
可以解决问题,但我必须使用 global.app
.
在每个文件中重复它
我的 TypeScript 版本是 3.0.1
从 7.0.0 中的 ts-node 开始,启动时不会从 tsconfig.json
加载文件。相反,你应该像这样--files
ts-node --files src/boot.ts
我在这个问题上花了很多时间尝试了几乎所有的方法,比如添加到 typeRoots 我的 typings 文件夹,创建结构为 typings/module/index.d.ts 的 typing 文件夹,但没有任何效果,所以现在我已经现在明白上面的答案是什么意思了
对于新版本的 ts-node,我已经为我的项目脚本进行了更改:
ts-node@6: ts-node src/index.ts
ts-node@7: ts-node --files src/index
因此您的脚本将更改为如下所示
"scripts": {
"dev": "nodemon --exec ts-node --files src/index",
}
执行以上操作后,您的编译时间会增加很多,但我不能花更多时间在这上面,所以我坚持以上操作。
您可能还想访问 https://github.com/TypeStrong/ts-node#help-my-types-are-missing。
这是我如何修复它的。将 "nodemon --exec ts-node --files src/app.ts" 添加到您的开发脚本中。
"scripts": {
"start": "node dist/app.js",
"dev": "nodemon --exec ts-node --files src/app.ts",
"build": "tsc -p",
"test": "echo \"Error: no test specified\" && exit 1"
},
我遇到了类似的问题,但我无法添加 --files
,因为我 运行 ts-node
通过 mocha
注册模块(即 mocha -r ts-node/register ...
).
我可以通过向 tsconfig.json
添加 files
和 ts-node
部分来解决它,如下所示:
// tsconfig.json
{
"ts-node": {
"files": true
},
"files": [
"src/index.ts",
"src/global.d.ts"
],
"compilerOptions":{
//...
}
}
TLDR
在 tsconfig.json
中添加 "ts-node": { "files": true },
以使 ts-node-dev
按预期工作
解释:
我在 package.json
中使用 ts-node-dev
例如:
"scripts": {
"build": "tsc",
...
"dev": "ts-node-dev src/index.ts"
},
npm run build
工作正常但 npm run dev
失败,我的类型定义文件在 src/types/*
.
在我的 tsconfig.json
中添加以下内容后,它开始正常工作
{
"ts-node": { "files": true }, // add this
"compilerOptions": {
...
}
}
成功编译我的 TypeScript 项目后,我打算使用 ts-node
在 VS Code 的调试模式下 运行 它。问题是,ts-node
找不到我创建的 d.ts
个文件(而 tsc
没有问题)。
项目结构为:
/
conf/
dist/
src/
types/
package.json
tsconfig.json
tsconfig.json
相关条目是:
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
// "lib": [],
"sourceMap": true,
"outDir": "dist",
"rootDir": "src",
"moduleResolution": "node",
"baseUrl": ".",
"paths": {
"*": [
"node_modules/*",
"src/types/*"
]
},
// "rootDirs": [],
// "typeRoots": [],
// "types": [],
},
"include": [
"src/**/*"
]
}
定义文件ts-node
找不到是src/types/global.d.ts
:
import { App } from '../App';
declare global {
namespace NodeJS {
interface Global {
app: App;
}
}
}
所以,尝试 运行 它与 ts-node
我明白了:
TSError: ⨯ Unable to compile TypeScript:
src/boot.ts(15,59): error TS2339: Property 'app' does not exist on type 'Global'.
如何全局解决?我发现 /// <reference path="./types/global.d.ts" />
可以解决问题,但我必须使用 global.app
.
我的 TypeScript 版本是 3.0.1
从 7.0.0 中的 ts-node 开始,启动时不会从 tsconfig.json
加载文件。相反,你应该像这样--files
ts-node --files src/boot.ts
我在这个问题上花了很多时间尝试了几乎所有的方法,比如添加到 typeRoots 我的 typings 文件夹,创建结构为 typings/module/index.d.ts 的 typing 文件夹,但没有任何效果,所以现在我已经现在明白上面的答案是什么意思了
对于新版本的 ts-node,我已经为我的项目脚本进行了更改:
ts-node@6: ts-node src/index.ts
ts-node@7: ts-node --files src/index
因此您的脚本将更改为如下所示
"scripts": {
"dev": "nodemon --exec ts-node --files src/index",
}
执行以上操作后,您的编译时间会增加很多,但我不能花更多时间在这上面,所以我坚持以上操作。
您可能还想访问 https://github.com/TypeStrong/ts-node#help-my-types-are-missing。
这是我如何修复它的。将 "nodemon --exec ts-node --files src/app.ts" 添加到您的开发脚本中。
"scripts": {
"start": "node dist/app.js",
"dev": "nodemon --exec ts-node --files src/app.ts",
"build": "tsc -p",
"test": "echo \"Error: no test specified\" && exit 1"
},
我遇到了类似的问题,但我无法添加 --files
,因为我 运行 ts-node
通过 mocha
注册模块(即 mocha -r ts-node/register ...
).
我可以通过向 tsconfig.json
添加 files
和 ts-node
部分来解决它,如下所示:
// tsconfig.json
{
"ts-node": {
"files": true
},
"files": [
"src/index.ts",
"src/global.d.ts"
],
"compilerOptions":{
//...
}
}
TLDR
在 tsconfig.json
中添加 "ts-node": { "files": true },
以使 ts-node-dev
按预期工作
解释:
我在 package.json
中使用 ts-node-dev
例如:
"scripts": {
"build": "tsc",
...
"dev": "ts-node-dev src/index.ts"
},
npm run build
工作正常但 npm run dev
失败,我的类型定义文件在 src/types/*
.
在我的 tsconfig.json
{
"ts-node": { "files": true }, // add this
"compilerOptions": {
...
}
}