2016-05-04 23 views
5

Ben xmldoc npm paketi için tip tanımları yazmaya çalışıyorum "dize hazır aracılığıyla nesne erişimi izin verilmiyor".typescript dizin hala tslint hata alıyorum

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 hala hata mesajı object access via string literals is disallowed

benim Dizin Oluşturucu ([index: string]: string) düşünce ile bu kod

valueId = node.attr["id"]; 

şikayet bu çalıştı:

Şimdiye kadar bu var .

kimse bana neden çalışmıyor bir ipucu verebilir misiniz? o typescript bunu derlemek için izin verdiğini de

+0

Sanırım bu, tslint'te bir hataya benziyor, muhtemelen dizin kuralı için bu kuralı hariç tutmadı. Geçerli bir kullanım durumu gibi görünüyor, bir hata raporu/öneriyi göndermeyi deneyin: https: //github.com/palantir/tslint/issues – Alex

cevap

5

Sizin dizin, bu çevrede çalışır ve bunu geçerli derleme typescript kodu olduğunu haklısın.

Burada sorun yalnızca TSLint kuralı; geçerli bir TypeScript olsa da, TSLint bunu yapmamanızı teşvik etmeye çalışıyor, çünkü sabit bir dizgeyle indeksleniyorsunuz, bu yüzden sadece nesne üzerinde bir özellik olabilir. TSLint, erişeceğiniz özellikler için IXMLAttributes'taki sabit özellikleri tanımlamanız gerektiğini düşünür.

Bunu yapabilirdiniz; IXMLAttributes'ınızda bir 'id: string' özelliği ekleyerek (endeksli mülke ek olarak, bunu kullanmak istediğiniz sabit olmayan bir durum varsa) kötü bir fikir değildir.

Bu sadece TSLint biraz ağır eli ediliyor burada düşünmek Şahsen bile. Bu gibi durumlarda sabit dize endeksleme kullanmak için mükemmel iyi nedenler var. TSLint yapılandırmanızda no-string-literal kuralını kapattım.