2013-02-12 17 views
17

Hiện tại có thể triển khai trình chỉ mục trên một lớp trong TypeScript không?Thực hiện một trình chỉ mục trong một lớp trong TypeScript

class MyCollection { 
    [name: string]: MyType;  
} 

Điều này không biên dịch. Tôi có thể chỉ định một người lập chỉ mục trên một giao diện, tất nhiên, nhưng tôi cần các phương thức trên kiểu này cũng như chỉ mục, vì vậy một giao diện sẽ không đủ.

Cảm ơn.

+1

Không: xem http://typescript.codeplex.com/discussions/398379 và http://stackoverflow.com/questions/14791550/how-to-implement-array-signature-method-in-typescript và – MiMo

Trả lời

23

Bạn không thể triển khai lớp có trình chỉ mục. Bạn có thể tạo một giao diện, nhưng giao diện đó không thể được thực hiện bởi một lớp. Nó có thể được thực hiện trong đồng bằng JavaScript, và bạn có thể chỉ định các chức năng cũng như các Indexer trên giao diện:

class MyType { 
    constructor(public someVal: string) { 

    } 
} 

interface MyCollection { 
    [name: string]: MyType; 
} 

var collection: MyCollection = {}; 

collection['First'] = new MyType('Val'); 
collection['Second'] = new MyType('Another'); 

var a = collection['First']; 

alert(a.someVal); 
5

Đây là một câu hỏi cũ, cho những người đang tìm kiếm câu trả lời: bây giờ nó có thể xác định một tài sản được lập chỉ mục như:

var lookup : {[key:string]:AnyType};

chữ ký của người chủ chốt phải là chuỗi hoặc số nguyên xem:

Interfaces on www.typescriptlang.org

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