Приведение числа к строке в 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();