2016-04-29 88 views
1

我是打字稿的新手,需要js。我已经看到了几种在打字稿中导入模块的方法。但我不清楚下面的代码在做什么。什么是导入打字稿中的模块的方法,以及require js在模块加载中的作用

1./// <reference path="foo.ts" /> 
2.import {utils} from "./util"; 
3.require(["bar"],function(bar){ 
    //use module here 
    }); 
4.define(["bar"],function(bar){ 
    //use module here 
    }); 
5.requirejs(["bar"],function(bar){ 
    //use module here 
    }); 

它们是如何相互区别的。任何人请帮助。

回答

1
  1. TypeScript-specific way of loading modules
  2. Is the standard way of loading modules
  3. 是如何​​负载模块。

RequireJS是一个库,它存在于JS有加载模块的官方语法之前。 RequireJS模块使用define调用来定义,传入依赖关系和一个在加载所有依赖关系时运行的函数。 A require调用是什么启动加载过程,通常在应用程序的开始时发现。

import/export是加载JavaScript模块的标准语法。去年的语法标准化iirc。目前,模块分辨率不是标准化的,也不是由任何浏览器实现的。但是这个语法被不同的工具用来“编译”JS。

我无法解释很多TypeScript的问题。文章应该为您提供您需要的一切。

///指令是该组中最常见的。它用作文件之间依赖关系的声明。

0

要真正理解这一点,您应该查看JavaScript中模块的历史记录。该语言在最新版本中只支持官方模块支持,并非所有浏览器都支持该功能。这里是一些好文章的清单。

http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html https://addyosmani.com/writing-modular-js/

要回答你的问题,第一类是用于内部模块(现改名为命名空间)。如果你有多个源文件,你可以使用它们,但是它们会被编译成单个文件(使用outFile编译器选项)。

第二种是新的ES6标准模块语法。你会在源代码中使用此,但是,就目前而言,会被编译成AMD或CommonJS的或SystemJS语法(后面的ES6标准)。

而剩下的都是AMD模块语法,define被用来定义将出口一些代码的模块。 require用于导入您的代码将使用的模块。您无法使用require导出任何代码,因此您通常只会将这一次用于主脚本文件。

随着打字稿的当前版本,你不会使用AMD或CommonJS的语法,你可以使用标准的ES6模块语法,然后你的编译器编译到正确的模块类型为每module财产在tsconfig.json文件。

相关问题