模块和接口可以具有相同的名称?

时间:2015-11-22 18:32:31

标签: typescript

以下似乎是合法的打字稿:

interface Vec2 {
    x: number;
    y: number;
}

module Vec2 {
    export function create(x?: number, y?: number) : Vec2 {
        return {x: x||0, y: y||0};
    }
    export function length(v: Vec2) : number {
        return Math.sqrt(v.x * v.x + v.y * v.y);
    }
}

const v:Vec2 = Vec2.create(1, 2);
const len = Vec2.length(v);

这有点整洁,因为你有一个结构类型的Vec2和一个在Vec2结构上运行的函数模块。 我想知道这是不是一个坏主意。最初我以为我应该得到一个编译器错误。

1 个答案:

答案 0 :(得分:2)

可以使用界面执行此操作...

  • 模块/命名空间
  • 变量
  • 环境类

如果您尝试以导致编译器危险的方式执行此操作,编译器将实际发出警告 - 例如使用接口和类(即,它无法推断出您的意思)

在某些情况下,使用这个技巧很有意义,它通常用在定义文件中,接口与同名变量配对。

酸测试是:当您使用此功能时,是否会导致您在代码中看到Vec2时必须考虑您的意思?如果是这样,你应该避免它,因为它会不必要地增加复杂性。它显而易见或无关紧要(因为它在定义文件中) - 然后继续使用它。