5

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

}

tslint はまだこのコードで不平を言っています

  valueId = node.attr["id"];

エラーメッセージ付きobject access via string literals is disallowed

私のインデクサー([index: string]: string)はこれを回避したと思いました。

なぜそれが機能しないのか、誰かが私に手がかりを与えることができますか?

4

1 に答える 1

5

あなたのインデクサーは、TypeScript がコンパイルできるようにするという点で、これを回避します。TypeScript コードのコンパイルが有効であることは間違いありません。

ここでの問題は、TSLint ルールだけです。それは有効な TypeScript ですが、定数文字列でインデックスを作成しているため、TSLint はそれを行わないように奨励しようとしているため、オブジェクトのプロパティである可能性があります。TSLint は、アクセスしようとしているプロパティの IXMLAttributes で固定プロパティを定義する必要があると考えています。

あなたはそれをすることができます。IXMLAttributes に 'id: string' プロパティを追加すること (使用したい非定数ケースがある場合は、インデックス付きプロパティに加えて) は悪い考えではありません。

個人的には、これはTSLintがここで少し扱いに​​くいだけだと思います。このような場合に、このような定数文字列インデックスを使用するのには十分な理由があります。TSLint 構成でno-string-literalルールをオフにするだけです。

于 2016-05-04T13:54:38.557 に答える