Indexer-ul TypeScript încă primește eroarea tslint „accesul la obiect prin literale de șiruri de caractere nu este permis”
Încerc să scriu definiții de tip pentru pachetul npm xmldoc.
Până acum am asta:
declare module 'xmldoc' {
export class XmlDocument {
constructor(contents: string);
public children: IXmlNode[];
}
export interface IXmlNode {
attr: IXmlAttributes;
val: string;
name: string;
children: IXmlNode[];
}
export interface IXmlAttributes {
[index: string]: string;
}
}
tslint încă se plânge la acest cod
valueId = node.attr["id"];
cu mesajul de eroare accesul obiectului prin literali de șir este interzis
Am crezut că indexatorul meu ([index: string]: string) funcționează în jurul acestuia.
Poate cineva să-mi dea un indiciu despre motivul pentru care nu funcționează?
Răspuns #1
Indexerul tău funcționează în jurul acesteia, în sensul că permite TypeScript să îl compileze, și ai dreptate că este cod TypeScript valid care se compilează.
Problema aici este doar regula TSLint; deși este TypeScript valid, TSLint încearcă să te descurajeze să faci asta, deoarece faci indexarea printr-un șir constant, așa că ar putea fi doar o proprietate a obiectului. TSLint consideră că ar trebui să definești proprietăți fixe pe IXMLAttributes pentru proprietățile la care vei avea acces.
Ai putea foarte bine să faci asta; adăugarea unei proprietăți 'id: string' pe IXMLAttributes (pe lângă proprietatea indexată, dacă există un caz neconstant în care ai dori să o folosești) nu este o idee rea.
Personal, totuși, cred că acesta este doar TSLint care este puțin prea strict aici. Există motive întemeiate să folosești indexarea cu șiruri constante în astfel de cazuri. Eu aș dezactiva doar regula no-string-literal în configurația ta TSLint.