似乎在TypeScript中要求模块实现接口非常有用。他们选择不实施这种能力有什么特别的原因吗?
我想不出任何理由为什么不允许模块实现接口,但如果是,那么还有其他方法要求模块提供一组特性/方法吗?
答案 0 :(得分:4)
如果模块不遵守这样的接口(技术上非零运行时开销,但实际上不太重要),则可以强制编译错误:
interface foo {
bar(): number;
}
module mod {
export function bar(): number {
return 0;
}
}
var mod_is_foo: foo = mod; // errors if you change 'number' to 'string' above
至于为什么不能说module mod implements foo
? All features start at minus 100
编辑添加 - 如果你想避免创建一个新的顶级var,可以用以下其他(有些古怪的)代替上面的var
语句:
<foo>mod; // Shortest, probably fastest?
<foo>undefined === mod; // Clearest non-var version?
答案 1 :(得分:1)
原因是模块更像是一个实例而不是可以实例化的东西(例如一个类)。通过这种方式,它更接近于var而不是类。
因此,理由与你写作的原因类似:
var x:foo;
而不是
var x implements foo;
模块的行为与你可以做的相同
var y:foo = mod;
正如瑞安已经指出的那样。
同时检查一下:
interface foo {
bar(): number;
}
module mod {
export function bar(): number {
return 0;
}
}
var x: foo;
x = mod;
// Still a bit whacky but allowed as module is a type as well as an instance
var y:mod;
y = x;