typescript类的overload []

时间:2014-07-24 17:53:53

标签: operator-overloading typescript

我有课:

export class ArrayList<t> {

   items:t[];
   // other stuff...
}

有没有办法定义[]运算符,所以我得到:

var data = new ArrayList<number>();
data.add(23);
var x = data[0];

我99%肯定这属于无操作符重载类别。但我要问的是,这是不同的。

谢谢 - 戴夫

2 个答案:

答案 0 :(得分:2)

没有办法编写处理索引操作符的函数。

您可以将items直接存储到类实例本身,但这可能是一个坏主意。

答案 1 :(得分:0)

虽然JavaScript本身没有运算符重载(因此也没有在TypeScript中),但ES6添加了Proxy objects,所以只要您的浏览器支持ES6(转换器无济于事),您就可以使用它们代替(尽管如果可能的话可能会更加避免,因为这可能会使调试变得更难)。

它还添加了Object.defineProperty(),它可用于通过getter和setter而不是值来定义对象属性(但更像是直接在类实例上存储值,你似乎试图避免这些)。

另一方面,在你的情况下,你应该只使用一些“get”方法,即使你所描述的是某种方式可以实现的,因为在没有真正的运算符重载的语言中这样做是更标准的方法。通过data.get(i)而不是data[i]获取元素是众所周知的编程习惯,而放弃它会产生使用普通数组而不是自定义类的错觉。