【问题标题】:"tsc --out ... --declaration" is not including custom interfaces“tsc --out ... --declaration”不包括自定义接口
【发布时间】:2013-05-22 08:46:33
【问题描述】:

设置
假设我们有两个文件,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 实际工作而不抛出错误,我们需要手动添加对 B.d.ts 的引用,或者我们需要将 B.d.ts 的全部内容复制并粘贴到 foo.d.ts 中。

这两种解决方案都相当难看。那么有没有办法通过打字稿编译器创建一个单一的声明文件,该文件还包括用户创建的接口?我一定是错过了什么……

【问题讨论】:

    标签: typescript tsc


    【解决方案1】:

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

    如果它确实包含这些定义,那么当人们组合多个库时会导致重复定义错误(即,jQuery 定义将在每个插件定义中重复)。

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

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

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

    【讨论】:

      【解决方案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 的接口:@987654323 @

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

      您可以在 .ts 中为您的类/变量等使用 declare 关键字 不要对接口使用 declare ,因为这在 TS > 0.9 中会中断

      【讨论】:

        猜你喜欢
        • 2018-10-10
        • 1970-01-01
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        • 2018-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多