我有课:
export class ArrayList<t> {
items:t[];
// other stuff...
}
有没有办法定义[]运算符,所以我得到:
var data = new ArrayList<number>();
data.add(23);
var x = data[0];
我99%肯定这属于无操作符重载类别。但我要问的是,这是不同的。
谢谢 - 戴夫
答案 0 :(得分:2)
没有办法编写处理索引操作符的函数。
您可以将items
直接存储到类实例本身,但这可能是一个坏主意。
答案 1 :(得分:0)
虽然JavaScript本身没有运算符重载(因此也没有在TypeScript中),但ES6添加了Proxy objects,所以只要您的浏览器支持ES6(转换器无济于事),您就可以使用它们代替(尽管如果可能的话可能会更加避免,因为这可能会使调试变得更难)。
它还添加了Object.defineProperty(),它可用于通过getter和setter而不是值来定义对象属性(但更像是直接在类实例上存储值,你似乎试图避免这些)。
另一方面,在你的情况下,你应该只使用一些“get”方法,即使你所描述的是某种方式可以实现的,因为在没有真正的运算符重载的语言中这样做是更标准的方法。通过data.get(i)
而不是data[i]
获取元素是众所周知的编程习惯,而放弃它会产生使用普通数组而不是自定义类的错觉。