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



我正在使用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";

tscts-loader都会发出一个包含类型的types.d.ts文件,但不包含很棒的打字稿加载器。我不能告诉你这里的确切原因 - 我找到的唯一参考是 awesome-ts-loaders 似乎试图基于更复杂的依赖解析方法变得更加智能,这在这种边缘情况下可能会适得其反。如有疑问,我会假设tsc具有正确的参考行为。

无论如何,将仅具有类型声明ts文件重命名为扩展名更习惯d.ts因为不会发出任何代码输出。所以你最终会得到一个问题,为什么源目录中的 d.ts 文件没有被复制到构建文件夹中tsc.

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

最新更新