NodeJS TypeScript没有在tsconfig中拾取我的自定义类型定义

n1bvdmb6  于 12个月前  发布在  Node.js
关注(0)|答案(2)|浏览(112)

我正在使用tsconfig检查我的js文件。我在custom_types\custom.d.ts中有我的自定义类型定义

tsconfig.json

{
  "compilerOptions": {
    "target": "es2020",
    "module": "commonjs",
    "allowJs": true,
    "checkJs": true,
    "outDir": "./dist",
    "strict": true,
    "typeRoots": ["./custom_types/", "node_modules/@types/"],
    "types": ["node"],
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": ["src/**/*"]
}

自定义类型/自定义.d.ts

declare global {
  const foo: string;

  namespace NodeJS {
    interface Global {
      foo: string;
    }
  }
}
export default global;

src/app.js

let bar = foo; // Cannot find name 'foo'.ts(2304)

但是,当我在tsconfig中这样做时:

{
  ...
  },
  "include": ["src/**/*", "custom_types/custom.d.ts"]
}

一切都很完美。所以这让我认为我的tsconfig是错误的,TypesScript完全忽略了这一部分:

"typeRoots": ["./custom_types/", "node_modules/@types/"],

当我试图用自己的自定义类型定义指定文件夹的路径时,我做错了什么?
p.s. "node_modules/@types/"TypeScript正确地拾取(@types内部的所有东西都对我可用)。但是"./custom_types/"被忽略。

**UPD:**许多答案都建议使用baseUrlpaths做一些事情。但是,这样做对我没有任何好处:

"baseUrl": "./",
    "paths": {
      "@custom_types": ["*", "./custom_types/*"]
    },
    "typeRoots": ["@custom_types/custom.d.ts", "node_modules/@types/"],
9ceoxa92

9ceoxa921#

我以前做过,我记得那是一场斗争。他们可能在新版本的typescript中修改了它,但我还没有测试过。我之前的tsconfig看起来像:

"compilerOptions": {
    "module": "commonjs",
    "noImplicitAny": true,
    "removeComments": true,
    "preserveConstEnums": true,
    "skipLibCheck": true,
    "sourceMap": true,
    "outDir": "./dist",
    "lib": [
      "es2017"
    ],
    "baseUrl": ".",
    "paths": {
      "*": [
        "*",
        "./types/*"
      ]
    }
  },
  "include": [
    "types/**/*.d.ts",
    "src/**/*"
  ],
  "exclude": [
    "node_modules",
    "**/*.spec.ts"
  ]

请查看includepaths设置,我在其中指定了自定义类型定义文件夹的位置。这在typescript 2.9.1中工作。
关于typeRoots:这个选项是为了向后兼容typings而添加的,这就是为什么它甚至没有出现在文档中,如果你不使用类型,就不应该使用它。更多信息可以在这里找到。

z0qdvdin

z0qdvdin2#

在导入js文件之前,您需要编译Typescript文件。
范例:

//test.ts:

const teststring:string="TestThis";
module.exports=teststring+"!";

//run tsc test.ts
//app.js
const testring = require("./test");
console.log(testring);

或者你可以看这里:'typeRoots' fails to find d.ts declaration files in project

相关问题