2012-10-11 15 views
8

मैं पूर्व-संकलित हैंडलबार स्क्रिप्ट के उपयोग के लिए हैंडलबार्स के लिए एक परिभाषा फ़ाइल बनाने की कोशिश कर रहा हूं। हैंडलबार्स पूर्व-संकलित स्क्रिप्ट को स्ट्रिंग अनुक्रमित हैश तालिका में फ़ंक्शंस में डाल देंगे, लेकिन मुझे पता नहीं लगाया जा सकता है कि यह कैसे परिभाषित किया जाएगा।टाइपस्क्रिप्ट फ़ंक्शन की हैश तालिका को परिभाषित करना

एक काल्पनिक परिभाषा होगा:

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

लेकिन यह है कि एक वैध परिभाषा नहीं है। परिभाषा इस तरह एक कॉल के लिए काम करना चाहिए:

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

इस तरह एक परिभाषा पास है:

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

लेकिन यह एक संख्यात्मक इंडेक्स के साथ एक सरणी है, और यह एक ही बात नहीं है, और वीएस इंटेलिसेंस सिर्फ यह तय करता है कि सरणी में कार्य कोई है।

+0

मुझे लगता है कि आपको लिखना है: '{(model.any): string; } [] '(तीर के बजाय एक कोलन का उपयोग करें '=>') – dcstraw

उत्तर

12

आप जो उपयोग करना चाहते हैं वह एक इंडेक्स हस्ताक्षर वाला ऑब्जेक्ट प्रकार है (स्पेक सेक्शन 3.5.3, विशेष रूप से 3.5.3.3 देखें)।

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

धन्यवाद यह वास्तव में – EFVincent

+0

अन्य लोगों के लिए ध्यान दें जो यहां भूमि: भाषा spec संस्करण 1.3 के लिए अनुभाग 3.7.4 है – Chad

संबंधित मुद्दे