Я довольно новичок в TypeScript, и мне хотелось бы знать, существует ли хороший способ переписать код, чтобы избежать ошибки TSLint. «Доступ к объекту через строковые литералы запрещен»в следующем кодеКак переписать код, чтобы избежать доступа к объекту TSLint через строковые литералы
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' }
];
Update: в конце выше содержание будет частью самогенерируемого файла с более чем 300 ECStruct
с, так что я хотел бы иметь определение класса (например, ECStruct1
), а затем его мета-описание (например, fields['ECStruct1']
).
Я никогда не использовал TS, но, глядя на ошибку и глядя на код, я бы сказал, что вам нужно заменить 'fields ['ECStruct1']' на 'fields.ECStruct1'. Использование точечной нотации для доступа к реквизитам объектов обычно предпочтительнее доступа к строковым литералам. –
Спасибо. Я уже пробовал, но 'fields.ECStruct1 =' не разрешен компилятором TS: Ошибка \t TS2339 Свойство «ECStruct1» не существует в типе «{[structName: string]: ECType []; }». –