我正在使用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}"]
}
}
awesome-typescript-loader 的行为似乎与 ts-loader 不同,并且在仅包含类型声明的ts
文件中发出声明方面tsc
。
给定一个仅包含类型导出的文件types.ts
export type MyType = "a"
并在另一个模块中导入index.ts
import { MyType } from "./types";
tsc
和ts-loader
都会发出一个包含类型的types.d.ts
文件,但不包含很棒的打字稿加载器。我不能告诉你这里的确切原因 - 我找到的唯一参考是 awesome-ts-loaders 似乎试图基于更复杂的依赖解析方法变得更加智能,这在这种边缘情况下可能会适得其反。如有疑问,我会假设tsc
具有正确的参考行为。
无论如何,将仅具有类型声明ts
文件重命名为扩展名更习惯d.ts
因为不会发出任何代码输出。所以你最终会得到一个问题,为什么源目录中的 d.ts 文件没有被复制到构建文件夹中tsc
.
在这种情况下,最简单的方法是通过手动构建步骤手动将所需的 d.ts 文件(用于公共库 API 或类似文件(复制到dist
。或者,您可以将新的 babel 排字稿预设与 Webpack 一起使用,并且仅针对声明使用单独的tsc
编译步骤。