【问题标题】:If external typescript modules don't have a module name, how do you avoid naming conflicts?如果外部打字稿模块没有模块名称,如何避免命名冲突?
【发布时间】:2014-04-17 19:37:48
【问题描述】:

这是关于the differences between internal and external modules 的问题的后续(某种程度上)。

我想使用外部模块,因为我们将有一个非常大的程序。问题是,如果我创建一个类 rectangle.ts:

   export class Rectangle {

        public x : number;
        public y : number;
        public width : number;
        public height : number;
    }

然后使用:

import rectangle = require("rectangle"); 
// or is it "import rectangle = module("rectangle");"?
var rect = new rectangle.Rectangle();

如果外面有另一个 Rectangle 类会发生什么?我需要担心命名空间冲突吗?或者我是否安全,因为我调用了 require 并且正在使用 .ts 文件来明确指定类并且全局命名空间中没有任何内容?

【问题讨论】:

  • 不确定“另一个”Rectangle 类是什么意思?如果您正在确定范围,那么可能出现问题的唯一方法是在同一个命名空间中引入第二个 Rectangle。所以,也许,我不清楚你在问什么。不,它不再是module('xyz')。这已被弃用。
  • @WiredPrairie - 我想你已经回答了。我担心的是,rectangle.ts(或实际上是 rectangle.js)创建了一个名为 Rectangle 的全局类(因此也是对象),它可能与另一个名为 Rectangle 的全局对象冲突。不是这样吗?除非他们导入,否则没有其他人可以看到该类?
  • 例如,如果您将Rectangle 放入Shapes 模块并将其导入,则其范围将限定为Shapes。如果您使用的是 AMD 或 CommonJS 模块,那么只有通过错误配置才会导致冲突。这是可能的,但需要努力。 :)
  • @WiredPrairie 好的,谢谢。 ps - 每次我开始认为我理解 typescript 时,我都会被其他东西绊倒,这让我意识到我不太理解它(还)。

标签: browser module requirejs typescript


【解决方案1】:

如果您有许多矩形模块,您可以选择在导入它们时随意命名它们。该模块仅放置在您的别名中,它们不会污染您的范围。

例如:

import rectangle = require(./rectangle'); 

import differentRectangle = require('./folder/rectangle');

var rect = new rectangle.Rectangle();
var rectB = new differentRectangle.Rectangle();

顺便说一句,现在是require,而不是module

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    相关资源
    最近更新 更多