TypeScript索引器仍然出现tslint错误"不允许通过字符串文字进行对象访问"

And*_*phy 5 indexer typescript tslint

我正在尝试为xmldocnpm包编写类型定义.

到目前为止我有这个:

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;
  }

}
Run Code Online (Sandbox Code Playgroud)

tslint仍在抱怨此代码

  valueId = node.attr["id"];
Run Code Online (Sandbox Code Playgroud)

带有错误消息 object access via string literals is disallowed

我以为我的indexer([index: string]: string)解决了这个问题.

任何人都可以给我一个线索,为什么它不工作?

Tim*_*rry 5

您的索引器确实可以解决这个问题,因为它允许TypeScript编译它,并且您正确地编译TypeScript代码是正确的.

这里的问题只是TSLint规则; 虽然它是有效的TypeScript,但TSLint试图鼓励你不要这样做,因为你是用常量字符串索引的,所以它可能只是对象的属性.TSLint认为您应该在IXMLAttributes上为您要访问的属性定义固定属性.

你可以做到这一点; 在IXMLAttributes上添加'id:string'属性(除了索引属性,如果有一个非常量的情况,你想使用它)也不是一个坏主意.

就个人而言,我认为这只是TSLint在这里有点笨拙.在这些情况下,使用像这样的常量字符串索引是完全正当的理由.我只是关闭TSLint配置中的无字符串文字规则.