使用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转到定义”必须完成两次,这很烦人。
有更好的方法吗?或者我们应该尽可能地缩短命名空间?
答案 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();