打字稿索引获取/设置

时间:2016-06-21 13:46:30

标签: javascript arrays interface typescript

我正在实现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
}

1 个答案:

答案 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"