Передача числа в рядок в TypeScript


175

Який найкращий спосіб (якщо є такий) для передачі від номера до рядка в Typescript?

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буде автоматично перетворено число в рядок. Але щоб уникнути помилки компіляції 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відлиті анотації сказати компілятор транскрипта ласощі 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).
Jeroen

Якщо ви не хочете, щоб компілятор скаржився, просто скажіть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

Можна також використовувати наступний синтаксис у typecript. Зверніть увагу на "" "

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

5

window.location.hash є string, тому зробіть це:

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

0

const page_number = 3;

window.location.hash = page_number як рядок; // Помилка

"Перетворення типу" число "у тип" рядок "може бути помилкою, оскільки жоден тип недостатньо не збігається з іншим. Якщо це було навмисно, спочатку перетворіть вираз у" невідомий "." -> Ви отримаєте цю помилку, якщо спробуєте набрати номер у рядок. Отже, спочатку перетворіть його в невідоме, а потім у рядок.

window.location.hash = (сторінка_кількість невідомо) як рядок; // Правильний шлях


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.