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 添加 filests-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": {
     ...
  }
}