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

时间:2016-05-04 13:13:08

标签: typescript indexer tslint

我正在尝试为xmldoc npm包编写类型定义。

到目前为止,我有这个:

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仍在抱怨此代码

  valueId = node.attr["id"];

错误消息object access via string literals is disallowed

我认为我的索引器([index: string]: string)解决了这个问题。

有谁可以告诉我为什么它不起作用?

1 个答案:

答案 0 :(得分:5)

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

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

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

就个人而言,我认为这只是TSLint在这里有点笨拙。在这些情况下,使用常量字符串索引是完全正确的理由。我只是关闭TSLint配置中的no-string-literal规则。