टाइपस्क्रिप्ट में एक स्ट्रिंग के लिए एक नंबर कास्टिंग


175

टाइपस्क्रिप्ट में संख्या से स्ट्रिंग तक का सबसे अच्छा तरीका (अगर वहाँ एक है) है?

var page_number:number = 3;
window.location.hash = page_number; 

इस मामले में संकलक त्रुटि फेंकता है:

'स्ट्रिंग' टाइप करने के लिए 'नंबर' टाइप करने योग्य नहीं है

क्योंकि location.hashएक तार है।

window.location.hash = ""+page_number; //casting using "" literal
window.location.hash = String(number); //casting creating using the String() function

तो कौन सा तरीका बेहतर है?

जवाबों:


294

"कास्टिंग" रूपांतरण से अलग है। इस स्थिति में, window.location.hashएक नंबर को एक स्ट्रिंग में ऑटो-कन्वर्ट कर देगा। लेकिन टाइपस्क्रिप्ट संकलन त्रुटि से बचने के लिए, आप स्ट्रिंग रूपांतरण स्वयं कर सकते हैं:

window.location.hash = ""+page_number; 
window.location.hash = String(page_number); 

आप जब एक त्रुटि फेंक दिया करने के लिए नहीं चाहते हैं तो ये रूपांतरण आदर्श होते page_numberहै nullया undefined। जबकि page_number.toString()और page_number.toLocaleString()फेंक होगा जब page_numberहै nullया undefined।

जब आपको केवल कास्ट करने की आवश्यकता होती है, कन्वर्ट नहीं, तो यह है कि टाइपस्क्रिप्ट में स्ट्रिंग कैसे डाली जाए:

window.location.hash = <string>page_number; 
// or 
window.location.hash = page_number as string;

<string>या as stringडाली एनोटेशन इलाज के लिए टाइपप्रति संकलक बता page_numberसंकलन समय पर स्ट्रिंग के रूप में; यह रन टाइम में परिवर्तित नहीं होता है।

हालाँकि, कंपाइलर शिकायत करेगा कि आप किसी स्ट्रिंग को नंबर असाइन नहीं कर सकते। आपको पहले कास्ट करना होगा <any>, उसके बाद <string>:

window.location.hash = <string><any>page_number;
// or
window.location.hash = page_number as any as string;

इसलिए इसे केवल रूपांतरित करना आसान है, जो रन टाइम पर टाइप को हैंडल करता है और समय संकलित करता है:

window.location.hash = String(page_number); 

(स्ट्रिंग-नंबर कास्टिंग समस्या को पकड़ने के लिए @RuslanPolutsygan का धन्यवाद।)


1
सावधान, अगर page_numberहै nullइस सेट हो जाएगा window.location.hash* करने के लिए स्ट्रिंग "null"। (मैं एक त्रुटि पसंद करूंगा: D)।
— जेरोन

यदि आप कंपाइलर को केवल शिकायत करने के लिए नहीं चाहते हैंwindow.location.hash = <any>page_number;
— Mouneer

1
का उपयोग करते हुए रूपांतरण (यानी। String(page_number)) के बजाय कास्टिंग जब आप किसी भी उपयोग करना चाहते हैं के लिए आवश्यक है Stringकी तरह के तरीकों, toLowerCase()।
— EricRobertBrewer

31

बस उपयोग toStringया toLocaleStringमैं कहूँगा। इसलिए:

var page_number:number = 3;
window.location.hash = page_number.toLocaleString();

ये एक त्रुटि है अगर page_numberहै nullया undefined। यदि आप नहीं चाहते हैं कि आप अपनी स्थिति के लिए उपयुक्त विकल्प चुन सकें:

// Fix 1:
window.location.hash = (page_number || 1).toLocaleString();

// Fix 2a:
window.location.hash = !page_number ? "1" page_number.toLocaleString();

// Fix 2b (allows page_number to be zero):
window.location.hash = (page_number !== 0 && !page_number) ? "1" page_number.toLocaleString();

एक बड़ी मुद्रा के लिए कॉमा को जोड़ने के रूप में बड़ी संख्या के लिए toLocaleString का उपयोग न करें। यह पहचानकर्ताओं को नष्ट कर देगा।
— ओबैद

7

टाइपस्क्रिप्ट में निम्न सिंटैक्स का भी उपयोग कर सकते हैं। नोट करें "" "

window.location.hash = `${page_number}`

5

window.location.hash एक है string, इसलिए इसे करें:

var page_number: number = 3;
window.location.hash = page_number.toString(); 

0

const पेज_नंबर = 3;

window.location.hash = page_number as string; // त्रुटि

"टाइप 'नंबर' को टाइप करने के लिए 'स्ट्रिंग' में रूपांतरण करना एक गलती हो सकती है क्योंकि न तो टाइप दूसरे के साथ पर्याप्त रूप से ओवरलैप होता है। यदि यह जानबूझकर किया गया था, तो अभिव्यक्ति को पहले 'अज्ञात' में बदलें।" -> यदि आप स्ट्रिंग को टाइपकास्ट करने का प्रयास करते हैं तो आपको यह त्रुटि मिलेगी। तो, पहले इसे अज्ञात और फिर स्ट्रिंग में परिवर्तित करें।

window.location.hash = (पेज_नंबर अज्ञात के रूप में) स्ट्रिंग के रूप में; // सही तरीका


-4

एक स्ट्रिंग को एक संख्या में डालने के लिए "+" प्रतीक का उपयोग करें।

window.location.hash = +page_number;

4
+संख्या 18
— 18

1
एक स्ट्रिंग को एक नंबर देने की आवश्यकता है
— निक गैलिमोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.