我有一个列表类,如下所示:
class List<T> {
private _array: Array<T>;
constructor() {
this._array = new Array<T>();
}
get count() { return this._array.length; }
public add = (state) => {
this._array.push(state);
}
...
}
我想从类中访问内部数组:
var something = list[0];
在c#中,我会这样做:
public T this[int index]
{
get
{
return _array[index];
}
private set {}
}
}
但我无法在TypeScript中看到完成此任务。有没有办法在我的类中添加数组访问器,使它看起来更像是通用List?
感谢你的智慧!
答案 0 :(得分:1)
你可以虽然语法有点奇怪。请注意,由于typescript被编译为js,因此只有数字和字符串才是有效键:
interface IList<T> {
[index: number]: T
}
interface IMap<T> {
[index: string]: T
}
interface IMap<K, V> {
[index: K]: V // Error: Index signature parameter type must be either string or number
}
虽然有诀窍。您实际上无法重载运算符,您只能告诉编译器它存在。例如,如果您有一个希望用作哈希表的通用对象 - 将其声明为Map<T>
而不是any
。数组也是如此。
实际运用操作符的唯一可能方法是使用数组或对象作为底层元素,将它们声明为IList/IMap
,然后调整其属性/原型以添加特定功能。例如,要创建可观察数组,请参阅this answer