以下似乎是合法的打字稿:
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结构上运行的函数模块。 我想知道这是不是一个坏主意。最初我以为我应该得到一个编译器错误。
答案 0 :(得分:2)
您可以使用界面执行此操作...
如果您尝试以导致编译器危险的方式执行此操作,编译器将实际发出警告 - 例如使用接口和类(即,它无法推断出您的意思)
在某些情况下,使用这个技巧很有意义,它通常用在定义文件中,接口与同名变量配对。
酸测试是:当您使用此功能时,是否会导致您在代码中看到Vec2
时必须考虑您的意思?如果是这样,你应该避免它,因为它会不必要地增加复杂性。它显而易见或无关紧要(因为它在定义文件中) - 然后继续使用它。