我正在实现Typescript Array接口。我想知道是否有可能为索引定义get / set。例如:
class MyClass<T> implements Array<T> {
[index: number] : T;
// ... other methods
}
是否有可能以下列方式撰写:
class MyClass<T> implements Array<T> {
get [index: number] () : T {
// implementation
}
set [index: number] (value: T) : void {
// implementation
}
// ... other methods
}
答案 0 :(得分:1)
不,在类上重载索引运算符cannot be done;但是,您可以使用ES6 Proxy进行定义,但许多浏览器尚不支持。
另一种方法是在数组周围创建一个包装器,以强制人们使用这些方法,您可以在其中添加其他功能:
class MyContainer<T> {
private items: T[] = [];
get(name: string): T {
// some additional functionality may go here
return this.items[name];
}
set(name: string, value: T) : void {
// some additional functionality may go here
this.items[name] = value;
// or here
}
}
const myContainer = new MyContainer<string>();
myContainer.set("key", "value");
console.log(myContainer.get("key")); // "value"