我想创建我的超级真棒容器类,它拥有一个值。我可以在TypeScript中扩展一个函数吗?
let a = new Container(42);
的我想要得到的值这样
a(); // 42
和设定值这样
a(43);
有没有办法在打字稿实现这一目标?
我想创建我的超级真棒容器类,它拥有一个值。我可以在TypeScript中扩展一个函数吗?
let a = new Container(42);
的我想要得到的值这样
a(); // 42
和设定值这样
a(43);
有没有办法在打字稿实现这一目标?
运算符重载不能正常支持在JavaScript /打字稿。 如果您尝试调用某个类,则无法定义调用的函数(构造函数除外)。
确实没有真正的操作重载,但你仍然可以做一些 - 当然是有限的 - 类似于操作重载的东西[这里是一个例子](https://jsfiddle.net/gvo86g6c/)。 –
有没有办法在打字稿实现这一目标?
为什么不。因为它可以用普通的JavaScript来完成,所以在TypeScript中也很容易实现。与功能几乎一样,范围是我们方法的关键字。 当然,构造函数会被误用为闭包而不会创建会响应Container
通过typeof
运营商。这样的工厂函数将返回另一个函数,然后将其用作构造函数的封闭初始值的getter/setter。
打字稿例如...
class Container {
constructor(storageValue: any) {
return (function (value: any) {
if (arguments.length !== 0) {
storageValue = value;
}
return storageValue;
});
}
}
...在普通的JavaScript ...
var Container = (function ContainerClass() {
var Constructor = (function Container (storageValue) {
return (function (value) {
if (arguments.length !== 0) {
storageValue = value;
}
return storageValue;
});
});
return Constructor;
}());
var a = new Container(24);
console.log("a() : ", a()); // 24
console.log("a(4) : ", a(4)); // 4
console.log("a() : ", a()); // 4
var b = new Container(72);
console.log("b() : ", b()); // 72
console.log("b(5) : ", b(5)); // 5
console.log("b() : ", b()); // 5
console.log("a() : ", a()); // 4
而不是'if(UNDEFINED_VALUE!== value){'最好使用arguments.length === 0',因为'a()'和'a(undefined)'是两个不同的东西。 –
你显然是对的。 –
这不是类型安全的。如果您在任何地方放置“任何”,使用TypeScript是毫无意义的。 – Yaroslav
听起来像什么属性都。 – Stilgar