2016-05-04 54 views
5

xmldoc npmパッケージの型定義を書き込もうとしています。TypeScriptインデクサでtslintエラーが発生する "文字列リテラルによるオブジェクトアクセスが許可されていません"

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はまだエラーメッセージobject access via string literals is disallowed

私はインデクサ([index: string]: string)を考えて、このコード

valueId = node.attr["id"]; 

に不平を言っているこの問題を回避働い:

は、これまでのところ私はこれを持っています。

誰も私にそれが動作していない理由についての手がかりを与えることができますか?

+0

これはtslintのバグのように思えます。おそらく、そのルールをインデックスシグネチャの対象から除外していない可能性があります。有効なユースケースのようですが、バグレポート/提案を提出してみてください:https://github.com/palantir/tslint/issues – Alex

答えて

5

インデクサーは、これを回避するために、TypeScriptでコンパイルすることができます。正しいTypeScriptコードをコンパイルすることができます。

ここでの問題は単なるTSLintルールです。 TSLintは有効なTypeScriptですが、TSLintはそれをしないようにしています。なぜなら、定数ストリングでインデックスを作成しているからです。 TSLintは、アクセスしようとしているプロパティの固定プロパティをIXMLAttributesに定義する必要があると考えています。

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

個人的には、これはちょっとTSLintが少し重いここにいると思うけど。これらのケースでは、このように定数文字列インデックスを使用するのは正当な理由があります。 TSLint設定のno-string-literalルールをオフにするだけです。

関連する問題