¿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.
String
es 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 ques2
en el ejemplo anterior crea una nueva cadena sin el uso de lanew
palabra clave y sin usar explícitamente elString
objeto.string
es el tipo de cadena TypeScript, que puede usar para escribir variables, parámetros y valores de retorno.Notas adicionales...
Actualmente (febrero de 2013) Ambos
s1
ys2
son JavaScript válido.s3
es 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
string
tipo 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 delstring
tipo 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.
String
se refiere a una instancia de objeto que tieneString.prototype
en su cadena de prototipo. Puede obtener dicha instancia de varias maneras, por ejemplo,new String('foo')
yObject('foo')
. Puede probar una instancia delString
tipo con elinstanceof
operador, por ejemplomyString instanceof String
.string
es uno de los tipos primitivos de JavaScript, ystring
los valores se crean principalmente con literales por ejemplo,'foo'
y"bar"
, y, como el tipo de resultado de diversas funciones y operadores. Puede probar elstring
tipo usandotypeof myString === 'string'
.La gran mayoría de las veces,
string
es 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. DadoString
que actualmente se declara como una interfaz en lugar de una clase en la biblioteca principal de TypeScript , la tipificación estructural significa questring
se considera un subtipo,String
razó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
string
a un tipo de objeto de cadena (creado mediante unanew
palabra clave). El compilador le dice que debe usar el tipostring
solo para tipos primitivos de cadenas y no puede usar este tipo para describir tipos de objetos de cadena.fuente
TypeScript:
String
vsstring
manifestació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