Typescript 不会复制 d.ts 文件来构建

2023-12-09

所以也许我很困惑,但我想如果我添加declaration:true到我的 tsconfig.json 我可以让它 tsc 复制我的*.d.ts文件,以及转译的代码和它的d.ts files?

EG:

- src
 - lib
   - types.d.ts
   - foo.ts

我期望 tsc 的结果是这样的:

- build
 - lib
   - types.d.ts
   - foo.js
   - foo.d.ts

但是,我似乎无法得到types.d.ts复制到我的构建目录。

typescript 不提供任何复制机制吗.d.ts文件?或者我只是在某个地方配置错误? (此时我已经尝试了很多不同的配置;似乎没有任何效果)


你是对的 -declaration:true意味着仅对于每个给定的.ts file tsc生成并复制对应的.d.ts输出文件到build目录(除了.js and .map如果适用)。所以tsc不会复制您的定制types.d.ts文件到输出目录。

基本上.d.ts文件被视为编译器进行类型检查的不可触及的输入。它们不用于任何输出生成,这也意味着它们不会被复制到build。您可以阅读更多内容here关于维护者的立场:

您使用的 .d.ts 文件是构建系统的输入,而不是输出。使用 .d.ts 中的某些类型但让您的输出不使用这些类型是完全合理的,因此没有理由将输入 .d.ts 与您的构建结果一起分发。 [...] 听起来您需要在构建工具中执行构建后步骤,将相关的 .d.ts 文件复制到您需要的任何位置。

.d.ts 文件被视为“引用”,编译器不会触及它们、不会移动它们或重新创建它们。考虑 .d.ts 文件的一个简单方法是它们与 .js 文件一起使用。如果您要复制 .js 文件,则应复制匹配的 .d.ts。

解决方案#1:通过手动构建步骤复制 d.ts 文件

一个可能的解决方案是复制所有需要的.d.ts文件如types.d.ts在构建步骤中手动进行。具体工具是偏好的,取决于您的项目和构建类型、操作系统等。该工具应保留下的目录结构src将文件复制到时build, 以便import类型引用仍然有效。仅举几例:cp --parents(壳),rsync, robocopy或独立于平台的 npm 包,例如复制文件:

"scripts": {
  "copy-dts": "copyfiles -u 1 \"src/**/*.d.ts\" build"
}

解决方案 #2:将 d.ts 文件改写为 .ts 扩展名

改写你的.d.ts文件到.ts扩展(或将类型重新集成到现有的.ts文件),所以tsc负责在输出中发出声明。轻微的缺点:编译器没有强制类型和实现代码之间的分离(d.ts文件不允许包含代码)。最大的优点是,您不需要额外的构建步骤。

在我看来,后者是生成公共 API 的最简单方法,例如对于你的 npm 包,而.d.tsfile 可以成为内部使用和共享类型声明的候选者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript 不会复制 d.ts 文件来构建 的相关文章

随机推荐

  • 对使用 exams2moodle() 创建的多项选择题和完形填空题进行评分

    我在用exams2moodle 从 R exams 在 Moodle 中创建多项选择题和完形填空题 在准备考试之前 我想确定 Moodle 如何计算成绩 在我看来 在多项选择题中 评估策略的默认设置是partial TRUE rule fa
  • ERROR:Xst:827 = 信号计数无法合成,同步描述错误

    我正在尝试模拟电梯 结果出现错误 ERROR Xst 827 Signal count cannot be synthesized bad synchronous description 我正在关注此来源的代码 https www yout
  • Wildfly 8 Final 上的 JSF 1.2 -weld-core-jsf 仍然引用 JSF 2.2 API

    我目前正在将 JSF 1 2 应用程序迁移到 Wildfly 8 Final 但遇到了困难 首先 我读过很多有关相关问题的帖子 例如https community jboss org message 845006 or 将 JSF 1 2
  • 计算ng重复Angularjs中的值的总和

    我是 Angularjs 的新手 我正在使用 ng repeat 显示项目列表 如何计算它的总和 有没有简单的方法可以使用表达式在html中计算它 name numberofyears amount interest xxx 2 4000
  • int8_t 和 uint8_t 是 char 类型吗?

    给定这个 C 11 程序 我应该看到数字还是字母 还是不抱期望 include
  • Selenium 找不到类型为 number 的字段

    我在让 Cucumber 使用 HTML5 查找字段时遇到问题type number 我不太喜欢它们在浏览器中的显示方式 但我有一些字段需要移动设备上的数字键盘 这似乎是最简单的获取方式 我正在使用 SimpleForm 来构建表单 当我设
  • 设置Android系统音量

    我正在编写一个处理以下内容的应用程序 静音 使手机音量静音 低 使手机音量比静音时高 1 个百分点 中 使手机音量中等 高 将手机音量调至最大 电话音量包括铃声 视频 音频 游戏音量等 我知道如何通过以下方式实现静音模式AudioManag
  • numpy.all 轴参数行为不当?

    我有一个以下数组 a np array 0 5 0 5 0 9 0 9 gt gt gt a shape Out 72 2 4 gt gt gt np all a axis 0 Out 69 array False True False T
  • 将多列中的值乘以一列中的值

    我有以下数据 ID lt c CB1 CB2 CB3 size lt c 10 40 4 Year 1 lt c 10 6 15 Year 2 lt c 12 7 20 Year 3 lt c 14 8 25 data lt data fr
  • 使用 Core Motion 从加速度计数据获取位移

    我正在开发一个增强现实应用程序 目前 想要在表面上显示一个简单的立方体 并且能够在空间中移动 旋转和位移 以从所有不同的角度查看立方体 校准相机的问题在这里不适用 因为我要求用户将 iPhone 放置在他想要放置立方体的表面上 然后按下按钮
  • SIGKILL 信号处理程序

    我需要在收到任何终止命令 如 SIGTERM 和 SIGKILL 时写入日志文件 我可以注册 SIGTERM 但如何处理 SIGKILL 信号 你不能 至少不能杀死进程 你什么can要做的就是安排父进程监视子进程的死亡 并采取相应的行动 任
  • Firebase 绑定未反映在角度视图中

    我从 Firebase 中的每个对象 picUrl 图片的 url 中提取一个值 并将其存储在作用域数组变量 scope bricks 中 如何使 scope bricks 每次使用新对象更新 Firebase 时更新 从而更新新的 pic
  • 透视 mysql 结果集并创建 html 表/矩阵

    我整晚都把头撞在墙上 但还没有解决方案 假设我有这样的 Mysql 表结构 ID name value year 1 Tom 15 2018 2 Tom 4 2019 3 Tom 6 2020 4 Kate 18 2018 5 Kate 2
  • 在 Ruby 1.9.2 中使用 SOAP 和其他标准库

    因此 我最近升级到 1 9 2 Ruby 一直使用 1 8 7 我想尝试一下 Rails 3 我遇到的最大问题是我的 SOAP require 语句都不起作用 我有这样的问题 require soap rpc driver require
  • 更新 pandas groupby().last() 的列值

    给定数据框 dfd pd DataFrame A 1 1 2 2 3 3 B 4 5 6 7 8 9 C a b c c d e 我可以使用以下方法找到每个 A 组的最后一个 C 值 dfd groupby A last C 但是 我想将
  • 复制初始化和直接初始化的混淆

    考虑简单的陈述 摘自在 C 中 复制初始化和直接初始化之间有区别吗 A c2 A 该语句对临时值进行值初始化 然后复制该值 值写入 c2 阅读 5 2 3 2 和 8 5 14 这当然需要一个 非显式复制构造函数 阅读 8 5 14 和 1
  • 协议和委托之间的区别?

    和有什么区别protocol and a delegate and 我们如何声明variables in a protocol class 一个协议 用 protocolObjective C 中的语法 用于声明类 采用 声明它将使用此协议
  • 如何在调试模式下刷新 fmt 输出?

    我正在尝试fmt我确实从下面的代码中得到了输出 include
  • 通过选择部分或全部字符生成所有排列的算法

    我需要通过选择一些元素来生成字符串的所有排列 就像如果我的字符串是 abc 输出将是 a b c ab ba ac ca bc cb abc acb bac bca cab cba 我想到了一个基本算法 其中我生成 abc 的所有可能组合
  • Typescript 不会复制 d.ts 文件来构建

    所以也许我很困惑 但我想如果我添加declaration true到我的 tsconfig json 我可以让它 tsc 复制我的 d ts文件 以及转译的代码和它的d ts files EG src lib types d ts foo