Typescript,Requirejs,import语句和别名

时间:2016-01-29 09:37:12

标签: module typescript requirejs

使用Java,导入非常简单明了。

使用以下语句导入:

import fr.domain.MyUtils;

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

MyUtils.myStaticMethod();

只有当同一个文件中有两个时,才需要命名MyUtils。

使用Typescript AMD和requirejs似乎更复杂。

这里是import语句:

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

以及使用它的方式:

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

相当详细......

我发现使用别名的唯一方法是将import语句加倍:

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

完成后,您可以在模块中写下这个:

MyUtils.myStaticMethod();

它更干净但是Eclipse TS插件完全丢失了,并且自动完成变得不稳定。在Visual Studio中,自动完成没问题,但“F12转到定义”必须完成两次,这很烦人。

有更好的方法吗?或者我们应该尽可能地缩短命名空间?

1 个答案:

答案 0 :(得分: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();