Приведение числа к строке в 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
Так какой метод лучше?
5 ответов:
"литье" отличается от преобразования. В этом случае
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
.когда вам нужно только бросить, а не конвертировать, это как бросить в строка в машинописном тексте:
window.location.hash = <string>page_number; // or window.location.hash = page_number as string;
The
<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 за то, что он поймал проблему с литьем строк.)
просто использовать
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();