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}`;