javascript - המרת מספר למחרוזת ב-TypeScript
מהו הדרך הטובה ביותר (אם יש כזו) להמיר ממספר למחרוזת ב-TypeScript?
var page_number:number = 3;
window.location.hash = page_number;
במקרה זה המהדר מראה את השגיאה:
סוג 'number' לא ניתן להקצות לסוג 'string'
כי location.hash הוא מיתר.
window.location.hash = ""+page_number; //casting using "" literal
window.location.hash = String(number); //casting creating using the String() function
אז איזו שיטה טובה יותר?
תשובה #1
"Casting" שונה מהמרה. במקרה זה, window.location.hash יהפוך אוטומטית מספר למחרוזת. אבל כדי למנוע שגיאת קומפילציה ב-TypeScript, אפשר לבצע את ההמרה למחרוזת בעצמך:
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.
כאשר אתה צריך רק לבצע המרה מסוג, ולא להמיר, כך מבצעים המרה למחרוזת ב-TypeScript:
window.location.hash = <string>page_number;
// or
window.location.hash = page_number as string;
הערות ההמרה <string> או as string אומרות לקומפילר של TypeScript להתייחס ל-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 על שזיהה את בעיית המרת המחרוזת למספר.)
תשובה #2
השתמש ב-toString() (או ב-toLocaleString(), אך שים לב שזה עלול להוסיף דברים כמו תווי מפריד אלפים), למשל:
var page_number:number = 3;
window.location.hash = page_number.toString();
אלה יגרמו לשגיאה אם page_number הוא null או undefined. אם אינך רוצה זאת, תוכל לבחור בתיקון המתאים למצב שלך:
// Fix 1:
window.location.hash = (page_number || 1).toString();
// Fix 2a:
window.location.hash = !page_number ? "1" page_number.toString();
// Fix 2b (allows page_number to be zero):
window.location.hash = (page_number !== 0 && !page_number) ? "1" page_number.toString();
// Fix 3, modern js:
window.location.hash = page_number?.toString() || "1";
תשובה #3
ניתן גם להשתמש בתחביר הבא ב-TypeScript. שימו לב לסימן הטקסט `
window.location.hash = `${page_number}`
תשובה #4
אלה כמה דרכים קצרות
any_type = "" + any_type;
any_type = String(any_type);
any_type = `${any_type}`;
