¿Alguien sabe la diferencia entre String y string en TypeScript? ¿Estoy en lo cierto al suponer que deberían ser lo mismo?
var a: String = "test";
var b: string = "another test";
a = b;
b = a; // this gives a compiler error!
La versión actual del compilador dice:
Type 'String' is not assignable to type 'string'.
'string' is a primitive, but 'String' is a wrapper object.
Prefer using 'string' when possible.
¿Eso es un error?
typescript
Paul0515
fuente
fuente

Respuestas:
Aquí hay un ejemplo que muestra las diferencias, lo que ayudará con la explicación.
Stringes el tipo de cadena de JavaScript, que puede usar para crear nuevas cadenas. Nadie hace esto ya que en JavaScript los literales se consideran mejores, por lo ques2en el ejemplo anterior crea una nueva cadena sin el uso de lanewpalabra clave y sin usar explícitamente elStringobjeto.stringes el tipo de cadena TypeScript, que puede usar para escribir variables, parámetros y valores de retorno.Notas adicionales...
Actualmente (febrero de 2013) Ambos
s1ys2son JavaScript válido.s3es válido TypeScript.Usar de
String. Probablemente nunca necesite usarlo, los literales de cadena se aceptan universalmente como la forma correcta de inicializar una cadena. En JavaScript, también se considera mejor usar literales de objeto y literales de matriz también:Si realmente tenía una inclinación por la cadena, podría usarla en TypeScript de una de dos maneras ...
fuente
stringtipo y la inicialización literal:var s: string = "My String";.var s: string = "My String"es idéntico avar s = "My String"... además, no importa cuántas veces lea esto responda, todavía no entiendo el propósito delstringtipo en TypeScript, ya que, al final del día ,('My String')['constructor'] === String...Los dos tipos son distintos tanto en JavaScript como en TypeScript: TypeScript simplemente nos da la sintaxis para anotar y verificar los tipos a medida que avanzamos.
Stringse refiere a una instancia de objeto que tieneString.prototypeen su cadena de prototipo. Puede obtener dicha instancia de varias maneras, por ejemplo,new String('foo')yObject('foo'). Puede probar una instancia delStringtipo con elinstanceofoperador, por ejemplomyString instanceof String.stringes uno de los tipos primitivos de JavaScript, ystringlos valores se crean principalmente con literales por ejemplo,'foo'y"bar", y, como el tipo de resultado de diversas funciones y operadores. Puede probar elstringtipo usandotypeof myString === 'string'.La gran mayoría de las veces,
stringes el tipo que debería usar: casi todas las interfaces API que toman o devuelven cadenas lo usarán. Todos los tipos primitivos JS se envolverán ( encuadrarán ) con sus tipos de objeto correspondientes cuando se usen como objetos, por ejemplo, accediendo a propiedades o llamando a métodos. DadoStringque actualmente se declara como una interfaz en lugar de una clase en la biblioteca principal de TypeScript , la tipificación estructural significa questringse considera un subtipo,Stringrazón por la cual su primera línea pasa las comprobaciones de tipo de compilación.fuente
En JavaScript, las cadenas pueden ser tipo cadena primitiva u objetos de cadena. El siguiente código muestra la distinción:
Su error:
El compilador de TS lo arroja porque intentó asignar el tipo
stringa un tipo de objeto de cadena (creado mediante unanewpalabra clave). El compilador le dice que debe usar el tipostringsolo para tipos primitivos de cadenas y no puede usar este tipo para describir tipos de objetos de cadena.fuente
TypeScript:
Stringvsstringmanifestación
fuente
Para lectores rápidos:
No siempre utilizar los tipos de números, cadenas , booleanos, símbolo, o un objeto Estos tipos se refieren a objetos en caja no primitivos que casi nunca se usan apropiadamente en el código JavaScript.
fuente