javascript - Finns det ett sätt att komma åt ett barnobjekt i typescript genom att kedja variabelnamn
Koden jag försöker ersätta:
this.selectedArray1.indexOf(someIndexObject);
Koden jag försöker ersätta den med:
var someVariable = "selectedArray1"
this[someVariable].indexOf(someIndexObject);
När jag gör ovanstående ersättning får jag dock ett kompileringsfel
TS2538: Type 'String' cannot be used as an index type
Är det möjligt att göra något sådant i TypeScript?
Svar #1
Typescript kommer att förhindra att du gör detta som standard, om det inte kan bevisa att strängen är en nyckel till typen eller att typen har en indexsignatur
Med något som är känt för att vara en nyckel:
class Foo {
selectedArray1 = [];
method(){
this['selectedArray1'] //ok the result is of the same type as the field
const s = 'selectedArray1'; // ok
this[s] // ok, the result is of the same type as the field
var someVariable = "selectedArray" + 1 // not provable to be a key
this[someVariable] // error
this[someVariable as keyof this] // but ok with an assertion, but is a union of all field types of this
}
}
Eller med en indexsignatur:
class Foo {
[s: string] : any
selectedArray1 = [];
method(){
var someVariable = "selectedArray" + 1 // not provable to be a key
this[someVariable] // ok, anything goes is of type any
}
}
