2016-05-04 18 views
5

Tôi đang cố gắng viết định nghĩa kiểu cho gói xmldoc npm.Trình chỉ mục TypeScript vẫn nhận được lỗi tslint "truy cập đối tượng qua chuỗi ký tự không được phép"

Cho đến nay tôi có điều này:

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 vẫn phàn nàn vào mã

valueId = node.attr["id"]; 

này với thông báo lỗi object access via string literals is disallowed

Tôi nghĩ indexer của tôi ([index: string]: string) làm việc xung quanh này .

Có ai cho tôi một đầu mối về lý do tại sao nó không hoạt động không?

+0

Tôi nghĩ rằng điều này trông giống như một lỗi trong tslint, thay vì có lẽ chỉ không loại trừ quy tắc đó cho chữ ký chỉ mục. Có vẻ như trường hợp sử dụng hợp lệ, hãy thử gửi một bugreport/suggestion: https: //github.com/palantir/tslint/issues – Alex

Trả lời

5

Trình chỉ mục của bạn làm việc xung quanh việc này, ở chỗ nó cho phép TypeScript biên dịch nó, và bạn nói đúng là nó biên dịch mã TypeScript hợp lệ.

Vấn đề ở đây chỉ là quy tắc TSLint; trong khi đó là TypeScript hợp lệ, TSLint đang cố gắng khuyến khích bạn không làm điều đó, bởi vì bạn đang lập chỉ mục bởi một chuỗi không đổi, vì vậy nó có thể chỉ là thuộc tính trên đối tượng. TSLint cho rằng bạn nên định nghĩa các thuộc tính cố định trên IXMLAttributes cho các thuộc tính mà bạn sẽ truy cập.

Bạn cũng có thể làm điều đó; thêm thuộc tính 'id: string' vào các thuộc tính IXMLAttributes của bạn (ngoài thuộc tính được lập chỉ mục, nếu có trường hợp không liên tục mà bạn muốn sử dụng nó) không phải là một ý tưởng tồi.

Cá nhân tôi nghĩ đây chỉ là TSLint hơi nặng tay ở đây. Có lý do chính đáng để sử dụng chỉ mục chuỗi liên tục như thế này trong những trường hợp này. Tôi chỉ cần tắt quy tắc no-string-literal trong cấu hình TSLint của bạn.

Các vấn đề liên quan