TypeScript: преобразовать логическое значение в строковое

У меня очень простая проблема: я не могу преобразовать простое логическое значение в строковое значение в TypeScript.

Я бродил по документации и не мог найти ничего полезного. Конечно, я пытался использовать метод toString(), но, похоже, он не реализован в bool.


Редактировать: у меня почти нет знаний о JavaScript, и я пришел к TypeScript с фоном C#/Java.


person Ucodia    schedule 08.02.2013    source источник
comment
Странно, нативный JS Boolean поддерживает toString.   -  person JohnnyHK    schedule 08.02.2013
comment
Кажется, TypeScript определенно не хватает этой базовой реализации.   -  person Ucodia    schedule 08.02.2013


Ответы (4)


Это либо ошибка в TypeScript, либо сознательное дизайнерское решение, но вы можете обойти это, используя:

var myBool: bool = true;
var myString: string = String(myBool);
alert(myString);

В JavaScript логические значения переопределяют метод toString, который доступен для любого Object (практически все в JavaScript наследуется от Object), так что...

var myString: string = myBool.toString();

... вероятно, должно быть действительным.

Для этого есть еще один обходной путь, но лично я нахожу его немного неприятным:

var myBool: bool = true;
var myString: string = <string><any> myBool;
alert(myString);
person Fenton    schedule 08.02.2013
comment
Это признанная ошибка в TypeScript, и, по-видимому, ее планируется исправить в следующем выпуске (0.8.2) — typescript.codeplex.com/workitem/362 - person Jon; 24.04.2013
comment
toString() определенно будет работать нормально с 2016 года (версии 1.6) - person Steel Nation; 10.05.2016
comment
флаг: логическое значение = логическое значение (истина); если вам нужно преобразовать в логическое значение из строки - person sandeep talabathula; 22.04.2017
comment
По-видимому, даже для версии TS 2.9.0-dev.20180327 toString() определенно НЕ будет работать! Пришлось использовать пример @Fenton здесь, чтобы он работал. СТРАННО, но факт. - person KidKode; 19.04.2018

Для тех, кто ищет альтернативу, есть еще один способ сделать это — использовать литерал шаблона примерно так:

const booleanVal = true;
const stringBoolean = `${booleanVal}`;

Настоящая сила в этом заключается в том, что вы не знаете наверняка, что получаете логическое значение. Хотя в этом вопросе мы знаем, что это логическое значение, это не всегда так, даже в TypeScript (если не использовать его в полной мере).

person Jon Black    schedule 09.08.2018

Один из подходов заключается в использовании тернарного оператора:

myString = myBool? "true":"false";
person Tolga    schedule 30.12.2017

Это, если вам также нужно обрабатывать нулевые значения:

stringVar = boolVar===null? "null" : (boolVar?"true":"false");
person Luca C.    schedule 20.07.2018