嵌套文件导出类型不包括.d.ts文件

时间:2019-09-24 14:46:42

标签: typescript webpack

我正在使用webpack和awesome-typescript-loader捆绑我的项目并创建.d.ts文件。我有这样的结构:

src
  - main.ts
  - types
    - index.ts
    - SomeType.ts

在main.ts中,我正在导出所有内容:

export * from './types';
export default ...

和types / index.ts如下:

export * from './SomeType.ts';

在构建项目时,types文件夹中的所有内容都丢失了,但是我希望创建.d.ts文件,以便可以将这些类型导入其他项目中。

我的tsconfig:

{
  "compilerOptions": {
    "removeComments": true,
    "moduleResolution": "node",
    "preserveConstEnums": true,
    "declaration": true,
    "sourceMap": true,
    "outDir": "./dist/",
    "noImplicitAny": true,
    "module": "esnext",
    "target": "es5",
    "lib": ["es2018", "dom"]
  },
  "include": ["src/**/*"],
  "awesomeTypescriptLoaderOptions": {
    "reportFiles": ["src/**/*.{ts,tsx}"]
  }
}

1 个答案:

答案 0 :(得分:1)

在仅包含类型声明的tsc文件中发出声明方面,awesome-typescript-loader的行为似乎与ts-loader和ts不同。

给出一个文件types.ts,仅包含类型export

export type MyType = "a"

并导入另一个模块index.ts

import { MyType } from "./types";

tscts-loader都发出一个types.d.ts文件,其中包含类型,但不包含awesome-typescript-loader。我无法在此告诉您确切的原因-我发现的唯一参考是,awesome-ts-loaders似乎tries to be more intelligent基于更复杂的依赖项解析方法,在这种情况下可能适得其反。如有疑问,我将假设tsc具有正确的引用行为。

无论如何,更常见的是将仅具有类型声明的ts文件重命名为d.ts扩展名,因为不会发出任何代码输出。因此,您以question结尾,为什么tsc不会将源目录中的d.ts文件复制到构建文件夹中。

在这种情况下,最简单的方法是通过手动构建步骤将所需的d.ts文件(用于公共库API或类似文件)手动复制到dist。或者,您可以在Webpack中使用新的babel打字稿预设,并有一个单独的tsc编译步骤,仅用于声明。