2017-02-28 3 views
6

मैं टाइप 5 के साथ ईएस 5 के tagged template literal का उपयोग करने की कोशिश कर रहा हूं लेकिन ऐसा लगता है कि टाइप स्क्रिप्ट के लिए पूर्ण समर्थन नहीं है। मेरे पास कोड का टुकड़ा है।टाइपस्क्रिप्ट: टैग की गईं टेम्पलेट लिटर्स दिखाता है त्रुटि

class TemplateLiterals { 
    age: number = 24; 
    name: 'Luke Skywalker' 
    private tag(strings: string[], personExp, ageExp) :string{ 
     var str0 = strings[0]; // "that " 
     var str1 = strings[1]; // " is a " 
     var ageStr; 
     if (ageExp > 99) { 
      ageStr = 'centenarian'; 
     } else { 
      ageStr = 'youngster'; 
     } 
     return str0 + personExp + str1 + ageStr; 
    } 
    toString() { 
     return this.tag `that ${ this.name } is a ${ this.age }`; 
    } 
} 

toString विधि में, टाइपप्रति त्रुटि निम्न मुझे दिखा रहा है।

Argument of type 'TemplateStringsArray' is not assignable to parameter of type 'string[]'. 
Property 'push' is missing in type 'TemplateStringsArray'. 

मुझे नहीं पता कि यह मुझे यह त्रुटि क्यों दिखा रहा है। मोज़िला के डॉक्टर के अनुसार "टैग फ़ंक्शन के पहले तर्क में स्ट्रिंग मानों की एक सरणी होती है।" तो इसे स्ट्रिंग की सरणी स्वीकार करनी चाहिए। लेकिन वास्तविक उम्मीद TemplateStringsArray है। सुनिश्चित नहीं है कि कैसे और कब interfaceTemplateSringsArray परिभाषित किया जा रहा है। वर्तमान में मैं इस त्रुटि से बचने के लिए TemplateSringsArray प्रकार का उपयोग कर रहा हूं। क्या कोई भी बता सकता है कि क्या हो रहा है। धन्यवाद। यहां playground है।

उत्तर

4

अधिक खोज करने के बाद, मुझे अंत में change log में स्पष्टीकरण मिला। उम्मीद है कि यह किसी की मदद करेगा। इसमें कहा गया है

ES2015 टैग किए गए टेम्पलेट्स हमेशा अपने टैग अपरिवर्तनीय सरणी की तरह वस्तु एक संपत्ति कच्चे कहा जाता है (जो भी अपरिवर्तनीय है) है कि गुजरती हैं। टाइपस्क्रिप्ट इस ऑब्जेक्ट को TemplateStringsArray नाम देता है। , टाइपप्रति 2.0 में,

function myTemplateTag(strs: string[]) { 
    // ... 
} 

हालांकि:

सुविधाजनक, TemplateStringsArray किसी सरणी के लिए आबंटित किया गया था, तो यह है संभव उपयोगकर्ताओं लाभ इस के अपने टैग पैरामीटर के लिए एक छोटी प्रकार उपयोग करने के लिए ले लिया भाषा अब रीडोनली संशोधक का समर्थन करती है और व्यक्त कर सकती है कि ये वस्तुएं अपरिवर्तनीय हैं। के परिणामस्वरूप, टेम्पलेट्सट्रिंग्सएरे को भी अपरिवर्तनीय बना दिया गया है, और स्ट्रिंग [] के लिए अब असाइन करने योग्य नहीं है।

सिफारिश:

उपयोग TemplateStringsArray स्पष्ट रूप से (या ReadonlyArray<string> उपयोग करें)।

1

मैं भी किसी भी दस्तावेज़ के बारे में TemplateStringsArray नहीं मिल सकता है - लेकिन तुम सिर्फ TemplateStringsArray बजाय string[] पैरामीटर को बदलने के द्वारा त्रुटि को अनदेखा (और नाम सदस्य के साथ एक बग को ठीक) यह ठीक काम करने लगता है, तो

class TemplateLiterals { 
    age: number = 24; 
    name: string = 'Luke Skywalker' 
    private tag(strings: TemplateStringsArray, personExp, ageExp) :string{ 
     var str0 = strings[0]; // "that " 
     var str1 = strings[1]; // " is a " 
     var ageStr; 
     if (ageExp > 99) { 
      ageStr = 'centenarian'; 
     } else { 
      ageStr = 'youngster'; 
     } 
     return str0 + personExp + str1 + ageStr; 
    } 
    toString() { 
     return this.tag `that ${ this.name } is a ${ this.age }`; 
    } 
} 

var luke: TemplateLiterals = new TemplateLiterals() 
console.log(luke.toString()) 
+0

'वर्तमान में मैं इस त्रुटि से बचने के लिए TemplateSringsArray प्रकार का उपयोग कर रहा हूं।' –

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