Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 环境声明样式和模块_Javascript_Typescript - Fatal编程技术网

Javascript 环境声明样式和模块

Javascript 环境声明样式和模块,javascript,typescript,Javascript,Typescript,有些人正在使用Backbone.d.ts编写主干应用程序。我想讨论两个用例 使用AMD加载器(或者我想也是CommonJS)创建带有模块的主干应用程序 使用普通JS创建主干应用程序 对于营地1中的那些,有必要将主干模块定义为外部模块,以便能够导入该模块并将其包含在define()包装中 对于营地2中的人,主干模块必须定义为内部模块,以便使用intellisense,而不需要使用importstatement/define()wrapper 问题:是否有其他方法来定义模块,以便在这两种情况下都可以

有些人正在使用Backbone.d.ts编写主干应用程序。我想讨论两个用例

  • 使用AMD加载器(或者我想也是CommonJS)创建带有模块的主干应用程序
  • 使用普通JS创建主干应用程序
  • 对于营地1中的那些,有必要将主干模块定义为外部模块,以便能够导入该模块并将其包含在
    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 {
    }