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


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.