"tsC语言 -out ... --declaration"不包括自定义接口



设置
假设我们有两个文件,A.ts和B.d.ts。现在在A中我们有:

class A implements B{...}

现在假设我想将所有的typescript文件组合成一个单一的定义文件。我知道如何做到这一点的唯一方法是创建一个.js文件,然后创建一个生成的.d.ts文件。

因此我们这样做:

tsc --out foo.js --declaration B.d.ts A.ts

我们得到了foo.js和foo.d.ts.

现在唯一的问题是,foo.d.ts只包含A.ts的定义,而不包含B.d.ts的定义。因此,为了让我们生成的foo.d.t真正工作,而不抛出错误,我们需要添加对B.d.t的手动引用,或者我们需要将B.d.ts中的全部内容复制并粘贴到foo.d.ts

这两种解决方案都相当丑陋。那么,有没有一种方法可以通过typescript编译器创建一个奇异的声明文件,其中还将包括用户创建的接口?我一定是错过了什么。。。

这种行为是经过设计的,旨在使编写库扩展和管理依赖关系变得更容易。例如,如果您正在编写jQuery插件,则希望.d.ts文件包含所有定义,但不包含jQuery定义。因此,编译器不会将"外部".d.ts文件中的任何内容添加到您生成的组合.d.ts文件中。

如果它包含这些定义,当人们组合多个库时,就会导致重复的定义错误(即jQuery定义在每个插件定义中都会重复(。

如果您希望代码包含在单个编译的.d.ts文件中,则它需要源自不带d前缀的.ts文件。这确实意味着要将declare关键字添加到文件中的模块/类中,但实际上,这可能会成为0.9版本的要求,即使是.d.ts文件,这样也不会有太多开销。

本质上,您可以将文件扩展名想象如下:

  • .ts文件是程序内部文件
  • .d.ts文件是外部依赖项

使用B.ts而不是B.d.ts

您可以在此处看到示例:https://github.com/basarat/ts-test/tree/master/tests/compileToSingle

我的输出.d.tshttps://github.com/basarat/ts-test/blob/master/tests/compileToSingle/out.d.ts包含dec.ts中的接口:https://github.com/basarat/ts-test/blob/master/tests/compileToSingle/dec.ts

我的out.d.ts不包含接口:https://github.com/basarat/ts-test/blob/34eeb54618e57765ea0e2f9ce0c48ebd7f46942a/tests/compileToSingle/out.d.ts如果我有一个dec.d.ts:https://github.com/basarat/ts-test/blob/34eeb54618e57765ea0e2f9ce0c48ebd7f46942a/tests/compileToSingle/dec.d.ts

您可以在.ts中为类/变量等使用declare关键字。不要为接口使用declard,因为它在TS>0.9

中中断

最新更新