2016-01-29 59 views
3

使用Java,导入非常简单明了。Typescript,Requirejs,import语句和别名

您导入用下面的语句:

import fr.domain.MyUtils; 

然后你可以使用它像这样:

MyUtils.myStaticMethod(); 

你只需要如果在同一个文件有两个到命名空间MyUtils。

随着Typescript AMD和requirejs,它似乎更复杂。

这里import语句:

import u = require('fr/domain/MyUtils'); 

,并使用它的方式:

u.fr.domain.MyUtils.myStaticMethod(); 

相当冗长......

我发现这样的票价使用别名的唯一方法是进口报表的两倍:

import u = require('fr/domain/MyUtils'); 
import MyUtils = u.fr.domain.MyUtils; 

这样做,你可以在一个模块中写后:

MyUtils.myStaticMethod(); 

它的清洁,但Eclipse的插件TS得到完全失去了这个和自动完成变得不稳定。在Visual Studio中,自动完成是确定的,但是“F12转到定义”必须执行两次,这很烦人。

有没有更好的方法来做到这一点?或者我们应该尽可能缩短命名空间?

+0

请出示你的'FR /域/ MyUtils'文件 –

回答

2

你做错了。

您的'fr/domain/MyUtils'模块应该只导出任何应该是MyUtils的内容。也就是说,它应该是这样的:

export function myStaticMethod() { /* ...code... */ } 

它不应该被出口一些全局命名空间对象,它不应该被添加任何东西,你从别的地方得到一些全局命名空间对象。模块文件在目录中的自然位置是您在使用外部模块时创建“名称空间”的方式。

如果你做正确的那么你的消费者是这样的:

import MyUtils = require('fr/domain/MyUtils'); 
MyUtils.myStaticMethod(); 

,或者使用ES模块语法更恰当:

import { myStaticMethod } from 'fr/domain/MyUtils'; 
myStaticMethod(); 
+0

你说得对,我现在明白了。这里有很好的解释: http://www.typescriptlang。org/Handbook#modules-模块的陷阱 当他们描述我在做什么时,“无需命名空间”: “因为外部模块文件本身已经是一个逻辑分组,并且它的顶级名称由导入它的代码,没有必要为导出的对象使用额外的模块层。“ – Ced

+0

截至目前,导入(外部)模块的首选方式是ES6模块语法。我认为你的答案中的一部分需要更多的重点 - 目前,它只不过是一个脚注。 –