有没有办法为生成的 .d.ts 文件(在 javascript 项目中)声明特定的模块名称?

Is there a way to declare a specific module name for a generated .d.ts file (in a javascript project)?

有没有办法为生成的 .d.ts 文件声明不同的模块名称?

tsc 生成 declare module "index" { 而不是 declare module "@myorg/my-pkg"(这将匹配 package.json 中的 name 属性)。

注意:这是在我尝试生成类型的纯 javascript 项目中。

/* Generated with tsc --init via TypeScript 3.7.0-beta */
{
  "compilerOptions": {
    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
     "allowJs": true,                         /* Allow javascript files to be compiled. */
     "declaration": true,                     /* Generates corresponding '.d.ts' file. */
    "outFile": "./lib/index.js",              /* Concatenate and emit output to single file. */
    "emitDeclarationOnly": true,              /* Only emit .d.ts files. */
    "strict": true,                           /* Enable all strict type-checking options. */
    "esModuleInterop": true,                  /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
    "forceConsistentCasingInFileNames": true  /* Disallow inconsistently-cased references to the same file. */
  },
  "include": [
    "js/**/*"
  ]
}

不幸的是,类型无法开箱即用地输出到单个文件。有 an open proposal to add "type bundling" (#4433) 添加功能。还有 3rd 方库可以帮助解决这个问题。

如果您可以输出多个文件,另一种解决方案是指定 outDir 而不是 outFile。这是我选择的解决方案,在tsconfig.json中设置"outDir": "./types",在package.json中设置"types": "./types/index.d.ts"。将模块导入其他项目时,这按我预期的方式工作。