javascript - Typescript index få/ange
Jag implementerar Typescript Array-gränssnittet. Jag undrar om det finns någon möjlighet att definiera get/set för index. Till exempel:
class MyClass<T> implements Array<T> {
[index: number] : T;
// ... other methods
}
Finns det en möjlighet att skriva på följande sätt:
class MyClass<T> implements Array<T> {
get [index: number] () : T {
// implementation
}
set [index: number] (value: T) : void {
// implementation
}
// ... other methods
}
Svar #1
Nej, överbelastning av indexoperatorn kan inte göras på klasser; däremot kan du definiera detta med en ES6-Proxy, men många webbläsare stöder det inte än.
Ett alternativ är att skapa ett omslag runt en array för att tvinga människor att använda metoderna, där du kan lägga till ytterligare funktionalitet:
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"
