有人正在使用Backbone.d.ts编写Backbone应用程序。我想讨论两个用例。
对于阵营1中的人员,必须将骨干模块定义为外部模块,以便能够导入模块并将其包含在define()
包装器中。
对于2号营地的人员,必须将骨干模块定义为内部模块,以便使用智能感知,而不需要使用import
语句/ define()
包装器。
问题:还有其他方法来定义模块,以便在两种情况下都可以使用它吗?
我真的不想创建一个叉子,以便你可以拥有
// required for those using import (1)
declare module "Backbone" {
或
// required for those not using import (2) and backbone already exists in the global scope
declare module Backbone {
仍然能够与您的代码/智能感知相处。
答案 0 :(得分:2)
我已经向TypeScript团队提出了这个问题,他们已经打开了一个工作项。
我提议如果你用...编写所有模块
module MyModule {
}
... wrapper,如果你将模块标志发送给编译器,它应该剥离模块声明,如果它与文件名匹配。这样你就可以编写一个模块,可以在没有修改的情况下编译为在web,CommonJS或AMD上工作。
原始讨论在这里,它已被移入工作项目:
答案 1 :(得分:2)
仅使用一个.d.ts
文件无法完成此操作,因为编译器需要知道您用于主干的模块系统类型,以便了解要生成的代码类型。您可以在单个文件中混合和匹配内部和外部模块,并且无法正确猜出您用于骨干的特定内容。
您可以使用interface
声明来制作它,以便您可以在一个地方声明大部分内容并拥有“backbone-internal.d.ts”和“backbone-external.d”。 .ts“引用该公共声明文件的文件,但您可以在多大程度上依赖于API的表面区域。
TL; DR:Camp 1和Camp 2不是互斥的,即使在同一个文件中也是如此。