5

В чем разница между типами String и string?

22

Подскажите, пожалуйста, в чем разница между String и string в TypeScript? Правильно ли я понимаю, что они должны быть идентичны?

var a: String = "test";
var b: string = "another test";
a = b;
b = a; // здесь возникает ошибка компиляции!

Текущая версия компилятора сообщает:

Тип 'String' не может быть назначен типу 'string'.
  'string' является примитивом, тогда как 'String' - это объект-обертка.
     Предпочитайте использовать 'string', когда это возможно.

Это ошибка в компиляторе?

5 ответ(ов)

4

Вот пример, который демонстрирует различия и поможет в объяснении.

var s1 = new String("Избегайте создавать объекты, если это возможно");
var s2 = "Строка, в TypeScript типа 'string'";
var s3: string;

String — это тип строки JavaScript, который можно использовать для создания новых строк. Однако на практике это делается довольно редко, поскольку литералы в JavaScript считаются более предпочтительными. Таким образом, s2 в приведённом выше примере создаёт новую строку без использования ключевого слова new и без явного обращения к объекту String.

string — это тип строки в TypeScript, который можно использовать для определения типов переменных, параметров и возвращаемых значений.

Дополнительные примечания...

На данный момент (февраль 2013 года) как s1, так и s2 являются допустимым JavaScript. s3 — это корректный TypeScript.

Что касается использования String. Вам, скорее всего, не придётся им пользоваться, строковые литералы универсально принимаются как правильный способ инициализации строк. В JavaScript также считается более правильным использовать литералы объектов и массивов:

var arr = []; // не var arr = new Array();
var obj = {}; // не var obj = new Object();

Если вы действительно хотите использовать String, то в TypeScript это можно сделать двумя способами:

var str: String = new String("Привет, мир"); // Использует объект String JavaScript
var str: string = String("Привет, мир"); // Использует тип строки TypeScript
0

TL;DR

Никогда не используйте типы Number, String, Boolean, Symbol или Object. Эти типы ссылаются на непервичные обернутые объекты, которые почти никогда не используются корректно в коде JavaScript. (выделение мое)

0

В JavaScript строки могут быть либо примитивным типом string, либо объектом String. Следующий код демонстрирует это различие:

var a: string = 'test'; // строковый литерал
var b: String = new String('another test'); // объект-обертка строки

console.log(typeof a); // string
console.log(typeof b); // object

Ваше сообщение об ошибке:

Type 'String' is not assignable to type 'string'. 'string' is a primitive, but 'String' is a wrapper object. Prefer using 'string' when possible.

выдается компилятором TypeScript, поскольку вы попытались присвоить переменной тип string строковый объект (созданный с помощью ключевого слова new). Компилятор сообщает вам, что тип string следует использовать только для примитивных строк, и не следует использовать его для описания типов строковых объектов.

0

Простой ответ:

  • string — это тип. Например, console.log(typeof 'foo') // string
  • String — это объект с методами для создания и манипуляции строками.
0
  1. string ==> примитивный тип данных.
  2. String ==> непервичный тип. Это объект, который имеет доступ к методам и свойствам класса String.
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь