Ich bin ziemlich neu in TypeScript und ich würde gerne wissen, ob es eine gute Möglichkeit gibt, Code zu schreiben, um TSLint Fehler zu vermeiden "Objektzugriff über Stringliterale ist im folgenden Code nicht zulässig“Wie schreibe ich Code um TSLint zu vermeiden "Objektzugriff über Stringliterale"
interface ECType
{
name: string;
type: string;
elementType?: string;
}
export var fields: { [structName: string]: Array<ECType>; } = { };
class ECStruct1 {
foo: string;
bar: number;
baz: boolean;
qux: number;
quux: number;
corge: ECStruct2[];
grault: ECStruct2;
constructor() {
...
}
}
fields['ECStruct1'] = [
{ name: 'foo', type: 'string' },
{ name: 'bar', type: 'int' },
{ name: 'baz', type: 'bool' },
{ name: 'qux', type: 'long' },
{ name: 'quux', type: 'ulong' },
{ name: 'corge', type: 'array', elementType: 'ECStruct2' },
{ name: 'grault', type: 'ECStruct2' }
];
aktualisieren: Am Ende wird der Inhalt oben mit mehr als 300 ECStruct
s Teil einer selbst erzeugten Datei sein, so würde Ich mag die Klassendefinition (zB ECStruct1
) gefolgt von seiner Meta-Beschreibung (zB fields['ECStruct1']
).
Ich habe nie TS verwendet, aber mit Blick auf den Fehler und Blick auf den Code, würde ich sagen, Sie müssen ersetzen 'Felder ['ECStruct1']' mit 'fields.ECStruct1'. Die Verwendung der Punktnotation für den Zugriff auf Objektrequisiten wird normalerweise gegenüber dem Zeichenfolgenliteralzugriff bevorzugt. –
Danke. Ich habe es schon ausprobiert, aber 'fields.ECStruct1 =' ist vom TS-Compiler nicht erlaubt: Fehler \t TS2339 Eigenschaft 'ECStruct1' existiert nicht beim Typ '{[structName: string]: ECType []; } '. –