设置
让我们说我们有两个文件,A.ts和B.d.ts.现在在A里面我们有:
class A implements B{...}
现在假设我想将所有的打字稿文件合并到一个单一的定义文件中。我知道如何执行此操作的唯一方法是创建.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.ts实际工作而不是抛出错误,我们需要添加一个手动引用Bdts或者我们需要将Bdts的全部内容复制并粘贴到foo.d.ts。
两种解决方案都相当难看。那么有没有办法通过typescript编译器创建一个单一的声明文件,该编译器也将包括用户创建的接口?我一定错过了什么......
答案 0 :(得分:6)
行为是设计的,它旨在使编写库扩展和管理依赖更容易一些。例如,如果您正在编写jQuery插件,则希望您的.d.ts
文件包含所有定义,但不包含jQuery定义。因此,编译器不会将“外部”.d.ts
文件中的任何内容添加到您生成的合并.d.ts
文件中。
如果它确实包含这些定义,当人们组合多个库时会导致重复的定义错误(即jQuery定义会在每个插件定义中重复)。
如果您希望代码包含在单个编译的.d.ts
文件中,则需要源自没有d前缀的.ts
文件。这确实意味着将declare
关键字添加到文件中的模块/类中 - 但实际上,即使对于.d.ts
文件,这也可能成为0.9版中的要求,因此开销不会很大。
从本质上讲,您可以将文件扩展名视为如下:
.ts
文件是程序的内部文件.d.ts
文件是外部依赖项答案 1 :(得分:2)
使用B.ts
代替B.d.ts
您可以在此处查看示例:https://github.com/basarat/ts-test/tree/master/tests/compileToSingle
我的 out.d.ts https://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关键字作为类/变量等。不要在接口中使用声明,因为在TS>中断了0.9