Преобразование числа в строку в 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).
Йерун
Если вы не хотите, чтобы компилятор жаловался, просто скажите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(); 
raneshu
источник
0

const page_number = 3;

window.location.hash = page_number в виде строки; // Ошибка

«Преобразование типа« число »в тип« строка »может быть ошибкой, поскольку ни один из типов не совпадает с другим. Если это было сделано намеренно, сначала преобразуйте выражение в« неизвестный ».» -> Вы получите эту ошибку, если попытаетесь ввести число в строку. Итак, сначала преобразуйте его в неизвестное, а затем в строку.

window.location.hash = (номер_страницы неизвестен) в виде строки; // Правильный путь

Анант Радж
источник
-4

Используйте символ «+», чтобы привести строку к числу.

window.location.hash = +page_number;
Беттайби Нидаль
источник
4
+бросает к числу
doup
1
Нужно привести число в строку
Ник