打字稿外部模块,如何保持正确的类型提示?

时间:2015-06-12 14:53:12

标签: javascript intellij-idea typescript

我将通过说我使用Intellij IDEA来解释这个问题。

关注此问题:If external typescript modules don't have a module name, how do you avoid naming conflicts?

这一切都很好,但是我们说我在两个Rectangle.ts文件中有两个Rectangle类,但是在不同的包中,比如src/utils/geomsrc/utils/ui或类似的东西。

src/utils/geom/Rectangle.tscalculateSurface()为唯一方法,src/utils/ui/Rectangle.tsdisplay()为唯一方法。

现在如果我在一个文件中调用它们,我会在类型提示中获得两种方法作为可能的调用。

import GeomRectangle = require();
import UiRectangle = require();

var geom: GeomRectangle = new GeomRectangle();
var ui: UiRectangle = new UiRectangle();

// Now both those are valid
ui.calculateSurface();
ui.display();

我正在思考它,因为我的两个Rectangle.ts文件都有一个exports = Rectangle,因为这是该类的名称,而Intellij IDEA必须使用此出口声明用于确定它对您的建议。

我的假设错了吗?有没有什么方法可以让类型提示在使用外部模块时不会自行绊倒,有时候,这些类的名称彼此相同?

1 个答案:

答案 0 :(得分:1)

我在Visual Studio中尝试了您的代码:

的geom / Rectangle.ts

class Rectangle {
    calculateSurface() {
       console.log("a");
    }
}

export = Rectangle;

UI / Rectangle.ts

class Rectangle {
    display() {
        console.log("b");
    }
}

export = Rectangle;

Test.ts

import GeomRectangle = require("./geom/Rectangle");
import UiRectangle = require("./ui/Rectangle");


var x: GeomRectangle = new GeomRectangle();
var ui: UiRectangle = new UiRectangle();

// Now both those are valid
ui.calculateSurface(); // compilation error here
ui.display();
  1. calculateSurface对象的intellisense选项中没有ui方法。
  2. ui.calculateSurface()
  3. 上存在编译错误

    所以它可能与Intellij IDEA或配置问题有关。