2012-10-11 62 views
8

Tôi đang cố gắng tạo tệp định nghĩa cho Handlebars, để sử dụng với các tập lệnh thanh tác vụ được biên dịch trước. Handlebars sẽ đưa các kịch bản được biên dịch trước vào một bảng băm được lập chỉ mục các hàm, nhưng tôi không thể tìm ra hoặc tìm ra cách xác định điều này.TypeScript Xác định bảng băm chức năng

Một định nghĩa giả sẽ là:

declare module Handlebars { 
    export var templates: { (model:any) => string; }[index: string]; 
} 

nhưng đó không phải là một định nghĩa hợp lệ. Định nghĩa nên làm việc cho một cuộc gọi như thế này:

var myHtml = Handlebars.templates["person-template"]({FNmae: "Eric"}); 

Một định nghĩa như thế này là gần:

export var templates: { (model:any) => string; }[]; 

Nhưng đó là một mảng với một số chỉ số, và nó không phải là điều tương tự, và VS Intellisense chỉ quyết định rằng các hàm trong mảng là bất kỳ nào.

+0

Tôi nghĩ bạn muốn viết: '{(model.any): string; } [] '(sử dụng dấu hai chấm thay vì mũi tên' => ') – dcstraw

Trả lời

12

Điều bạn muốn sử dụng là loại đối tượng có chữ ký chỉ mục (xem phần thông số 3.5.3, cụ thể 3.5.3.3).

declare module Handlebars { 
    export var templates: { 
     [s: string]: (model: any) => string; 
    } 
} 
+0

Cảm ơn chính xác là – EFVincent

+0

Lưu ý cho những người khác đến đây: Phần bây giờ là 3.7.4, cho phiên bản đặc tả ngôn ngữ 1.3 – Chad

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