2016-06-21 59 views
1

我正在实现Typescript数组接口。我想知道是否有可能为索引定义get/set。例如:Typescript索引获取/设置

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

不,类重载索引运算符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" 
+0

我已经在我的课了这种方法。我认为可能有直接的方式来做到这一点。 –