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

Typescript 模块和接口可以有相同的名称吗?,typescript,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

以下似乎是合法的打字脚本:

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结构上操作的函数模块。 我想知道这是不是个坏主意。起初,我认为我应该得到一个编译器错误。

你可以用一个接口和

  • 模块/名称空间
  • 变数
  • 普通班
如果您试图以可能导致编译器危险的方式执行此操作,例如使用接口和类(即,它无法推断您指的是哪一个),编译器实际上会警告您

在某些上下文中,使用此技巧很有意义,它通常用于定义文件中,接口与同名变量配对


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

谢谢。我会尝试尝试一下,看看我是否能以某种方式把自己搞糊涂。我发现在结构(接口)上运行的函数很有用,因为它允许我在同一个应用程序中更轻松地使用三个.js向量和cannon.js向量。但是,当函数和数据不属于同一个类时,我永远不知道如何命名。