Mam dużą ilość js kodu, który używa wielu asocjacyjnych tablic, które pozwalają na bardzo szybki dostęp do obiektów. Próbowałem więc przenieść ten kod i nie udało mu się. Tak więc nie rozumiem jeszcze wystarczająco dobrze TS.Dlaczego otrzymuję "Typ" ciąg "nie może być używany jako typ indeksu" błąd w TypeScript
Szukałem odpowiedzi na to pytanie i znalazłem sugestie, jak utworzyć interfejs itp. ... ale wydaje się to trochę nie na miejscu.
Więc próbowałem pozornie oczywiste:
class Foo {
allObjects: MyObject[];
constructor() {
this.allObjects = [];
}
}
gdzie MyObject - uproszczona:
class MyObject {
_id: String;
public getId(): String {
return this._id;
}
}
I chciałbym wierzyć, że:
myObjectInstance: MyObject;
fooInstance.allObjects[myObjectInstance.getId()] = myObjectInstance;
będzie dobrze ... I JESZCZE zobacz piękny błąd TS2342 (Argument wyrażenia indeksu musi być typu "string", "number" lub "any"), który nie powoduje żadnego wrażenia e do mnie, ponieważ getId() jest ciągiem znaków. Wygląda na to, że nie powinno to być takie trudne. Więc twoja pomoc będzie bardzo mile widziane ...
Możliwy duplikat [Maszynopis: różnica między string i ciąg] (http://stackoverflow.com/questions/14727044/ typecript-difference-between-string-and-string) –
'String' różni się od' string', to znaczy '_id: string;' powinien działać. Potrzebujesz 'String' tylko wtedy, gdy musisz używać' new' z nim, to znaczy prawie nigdy. – artem
Nawiasem mówiąc, termin "tablica asocjacyjna" nie jest używany ani w JavaScript, ani w TypeScript. –