NSj*_*nas 5 typescript typescript-typings .d.ts
所以也许我很困惑,但是我想如果我将declaration:truetsconfig.json 添加到tsconfig.json中,我可以让tsc复制我的*.d.ts文件,以及已转码的代码及其d.ts文件?
例如:
- src
- lib
- types.d.ts
- foo.ts
Run Code Online (Sandbox Code Playgroud)
我希望tsc的结果像这样:
- build
- lib
- types.d.ts
- foo.js
- foo.d.ts
Run Code Online (Sandbox Code Playgroud)
但是,我似乎types.d.ts无法复制到构建目录中。
打字稿是否不提供任何复制.d.ts文件的机制?还是我只是某个地方配置错误?(目前我已经尝试了许多不同的配置;似乎没有任何效果)
您是对的- declaration:true意味着仅对每个给定.ts文件tsc生成相应的.d.ts输出文件并将其复制到build目录(除适用外.js,.map如果适用)。因此tsc不会将您的自定义types.d.ts文件复制到输出目录。
基本上,.d.ts文件被视为编译器进行类型检查的不可修改的输入。它们不用于任何输出生成,这也意味着它们不会被复制到build。您可以在此处阅读更多有关维护者立场的信息:
您使用的.d.ts文件是构建系统的输入,而不是输出。使用.d.ts中的某些类型但让您的输出不使用这些类型是完全合理的,因此没有理由将输入.d.ts与您的构建结果一起分发。[...]听起来好像您想要在构建工具中执行构建后步骤,以便在需要的位置复制相关的.d.ts文件。
.d.ts文件被视为“引用”,编译器将不会触摸它们,不移动它们或重新创建它们。考虑.d.ts文件的一种简单方法是将它们与.js文件一起使用。如果要复制.js文件,则应复制匹配的.d.ts。
一种可能的解决方案是在构建步骤中手动复制所有需要的.d.ts文件types.d.ts。具体工具是首选项,它取决于您的项目和构建类型,以及OS。src当将文件复制到时build,此工具应保留目录结构,以便import类型引用仍然有效。仅举几例:cp --parents(壳)rsync,robocopy或独立于平台的NPM包像copyfiles:
"scripts": {
"copy-dts": "copyfiles -u 1 \"src/**/*.d.ts\" build"
}
Run Code Online (Sandbox Code Playgroud)
重命名.d.ts文件以.ts扩展(或将类型重新集成到现有.ts文件中),因此要tsc注意在输出中发出声明。轻微的缺点:类型和实现代码之间没有编译器强制实施的分隔符(d.ts不允许文件包含代码)。最大的优点是,您不需要额外的构建步骤。
我认为,后者是生成公共API的最简单方法,例如为您的npm软件包生成.d.ts文件,而文件可以成为内部使用和共享类型声明的候选对象。
希望有帮助。
| 归档时间: |
|
| 查看次数: |
902 次 |
| 最近记录: |