Кто-нибудь знает разницу между строкой и строкой в TypeScript? Правильно ли я полагаю, что они должны быть одинаковыми?
var a: String = "test";
var b: string = "another test";
a = b;
b = a; // this gives a compiler error!
Текущая версия компилятора говорит:
Type 'String' is not assignable to type 'string'.
'string' is a primitive, but 'String' is a wrapper object.
Prefer using 'string' when possible.
Это ошибка?
Вот пример, который показывает различия, которые помогут в объяснении.
var s1 = new String("Avoid newing things where possible");
var s2 = "A string, in TypeScript of type 'string'";
var s3: string;
String
- это тип строки JavaScript, который можно использовать для создания новых строк. Никто не делает этого, как в JavaScript, литералы считаются лучшими, поэтому s2
в приведенном выше примере создает новую строку без использования ключевого слова new
и без явного использования объекта String
.
String
- это тип строки TypeScript, который вы можете использовать для ввода переменных, параметров и возвращаемых значений.
Дополнительные примечания...
В настоящее время (февраль 2013 г.) И s1
, и s2
действительны JavaScript. s3
действителен TypeScript.
Использование String
. Вам, вероятно, никогда не понадобится его использовать, строковые литералы общепринято как правильный способ инициализации строки. В JavaScript также рекомендуется использовать литералы объектов и литералы массивов:
var arr = []; // not var arr = new Array();
var obj = {}; // not var obj = new Object();
Если у вас действительно была склонность к строке, вы можете использовать ее в TypeScript одним из двух способов...
var str: String = new String("Hello world"); // Uses the JavaScript String object
var str: string = String("Hello World"); // Uses the TypeScript string type
Два типа различаются в JavaScript, а TypeScript - TypeScript просто дает нам синтаксис для аннотации и проверки типов по мере продвижения.
String
относится к экземпляру объекта, который имеет String.prototype
в своей цепочке прототипов. Вы можете получить такой экземпляр различными способами, например. new String('foo')
и Object('foo')
. Вы можете проверить экземпляр типа String
с помощью оператора instanceof
, например. myString instanceof String
.
String
является одним из примитивных типов JavaScript, а значения String
в основном создаются с помощью литералов, например. 'foo'
и "bar"
, а также как результат типа различных функций и операторов. Вы можете проверить тип String
, используя typeof myString === 'string'
.
Подавляющее большинство времени String
- это тип, который вы должны использовать - почти все интерфейсы API, которые принимают или возвращают строки, будут использовать его. Все примитивные типы JS будут обернуты (в штучной упаковке) с соответствующими типами объектов при их использовании в качестве объектов, например. доступ к свойствам или методы вызова. Поскольку String
в настоящее время объявлен как интерфейс, а не класс в TypeScript основной библиотеке, структурная типизация означает, что String
считается подтип String
, поэтому ваша первая строка передает проверки типа компиляции.
string
тип и буквальную инициализацию:var s: string = "My String";
,