Javascript 环境声明样式和模块
有些人正在使用Backbone.d.ts编写主干应用程序。我想讨论两个用例Javascript 环境声明样式和模块,javascript,typescript,Javascript,Typescript,有些人正在使用Backbone.d.ts编写主干应用程序。我想讨论两个用例 使用AMD加载器(或者我想也是CommonJS)创建带有模块的主干应用程序 使用普通JS创建主干应用程序 对于营地1中的那些,有必要将主干模块定义为外部模块,以便能够导入该模块并将其包含在define()包装中 对于营地2中的人,主干模块必须定义为内部模块,以便使用intellisense,而不需要使用importstatement/define()wrapper 问题:是否有其他方法来定义模块,以便在这两种情况下都可以
define()
包装中
对于营地2中的人,主干模块必须定义为内部模块,以便使用intellisense,而不需要使用import
statement/define()
wrapper
问题:是否有其他方法来定义模块,以便在这两种情况下都可以使用
我真的不想创建一个fork,这样你就可以拥有任何一个
// required for those using import (1)
declare module "Backbone" {
或
并且仍然能够处理代码/智能感知。我已经向TypeScript团队提出了这个问题,他们已经打开了一个工作项 我建议如果你用
module MyModule {
}
…wrapper,如果您将模块标志发送给编译器,则如果模块声明与文件名匹配,则应将其剥离。这样,您就可以编写一个模块,无需修改即可编译为在web、CommonJS或AMD上工作
最初的讨论在这里,并已转移到一个工作项中:
这不能仅使用一个
.d.ts
文件来完成,因为编译器需要知道您正在使用哪种模块系统作为主干,以便知道要生成哪种代码。您可以在单个文件中混合和匹配内部和外部模块,并且无法准确猜测您使用的是哪一个作为主干
您可以使用接口
声明进行声明,这样您就可以在一个地方声明大部分内容,并且有一个“backbone internal.d.ts”和“backbone external.d.ts”文件引用该公共声明文件,但是你能做到的程度取决于API的表面积
TL;DR:Camp 1和Camp 2不是相互排斥的,即使在同一个文件中也是如此。实际上,这是非常不同的。您的请求是关于生成JavaScript的模块。这个问题是关于用于向编译器声明类型的“declare module”。
module MyModule {
}