搜索词
声明文件, .d.ts, 人体工程学, 可分发包, 库, 编译器选项
建议
我希望 tsc
能够包含一个选项,使得可以将我的项目源代码树中的 .d.ts
文件复制到配置的 outDir
中。
用例
我维护一个可分发的库,它经常作为其他包的依赖项使用。尽可能地,我依赖于 @type/*
包和核心类型库来表达我的库支持的平台中的类型。
然而,在这些情况下,这些源文件并不反映我支持的平台的真实情况(例如,具有专有 API 的老浏览器,或实验性的/不稳定的/新兴的网络平台功能)。在这些情况下,不适合将我的自定义类型上游到另一个包,即使是这样,等待上游贡献被接受和发布所涉及的延迟并不是阻止我的库发布的一个好理由。
在这些情况下,我倾向于在我的源代码树中用 .d.ts
文件表达这些类型。然而,根据 #5112 , tsc
作为原则不会将这些文件复制到我的配置的 outDir
中。这意味着我必须用额外的复制步骤使我的构建变得复杂,以生成一个全面、可发布的构件。与此同时,似乎 tsc
可以通过代表我复制这些文件来简化我的生活。
示例
这可以以许多方式表现出来,但一个假设的情况是添加一个编译器标志。将其称为 --include-custom-type-declarations
(或任何合适的名称)。
如果 tsc
以设置为 true 的此标志调用,则 tsc
将包括源代码树中生成的所有 .d.ts
声明在内的构件。
检查清单
我的建议满足以下准则:
- 这不会对现有的 TypeScript/JavaScript 代码造成破坏性更改
- 这不会改变现有 JavaScript 代码的运行时行为
- 这可以在不根据表达式的类型发出不同的 JS 的情况下实现
- 这不是一个运行时特性(例如库功能、JavaScript 输出非 ECMAScript 语法等)
- 这个特性将与 TypeScript's Design Goals 的其他部分一致。
4条答案
按热度按时间vpfxa7rd1#
这对于从JavaScript迁移到TypeScript的项目也非常有用。我想为遗留的JavaScript文件编写自定义类型声明文件,并从源代码树中输出
.d.ts
文件。然而,由于我的tsconfig.json
具有{ declarations: true, allowJs: true }
和tsc
,它会忽略源代码树中的.d.ts
文件,并为其生成自己的、较少丰富的JavaScript模块声明。例如,我有一个
并且
tsc
发出我知道我可以在遗留的JavaScript文件中编写JSDoc,但我更愿意编写TypeScript声明,并让
tsc
发出它们。kxe2p93d2#
This has started to cause me minor grief because I have to compile unnecessarily. My project is setup as follows.
The
tsconfig.json
in thetest
directory uses a project reference to thesrc
directory, which is great. Normally, to buildtest
, my NPM script would simplytsc -b test
. However, now that I have custom.d.ts
type declarations insrc
thattsc
does not emit, and TS files intest
reference compiled modules in../lib
, I am forced to undermine the project reference functionality and explicitlynpm run
the entire build process forsrc
, which includes manually copying type declarations and resources aftertsc -b src
, in order for modules intest
to access necessary type information. So, I have a chicken and egg problem.tsc -b test
will build bothsrc
andtest
, but thesrc
build will not emit my custom declarations, andtest
imports from thesrc
output directorylib
, and the custom types are not present. I cannot copy the custom types to where they need to be beforetsc -b test
, because thesrc
build will just overwrite them.I need
tsc
to emit my custom type declarations that I have created alongside their legacy.js
module counterparts.kfgdxczn3#
请查看我的example repository以了解该问题的演示。
zengzsys4#
顺便说一下,包含自定义类型定义文件的目的不仅是为了同一项目中的编译测试,也是为了该包的下游消费者。