Tratando de entender las diferencias entre estas declaraciones:
let foo = new String('bar'); // StringConstructor let foo = new Number(100); // NumberConstructor let foo: String = 'bar'; // interface let foo: Number = 100; // interface var foo: string = 'bar'; // globally scoped? var foo: number = 100; // globally scoped?¿Existen ventajas y desventajas particulares en el uso de declaraciones diferentes sobre otras?
El String primitivo de JavaScript es inmutable, lo cual es una gran diferencia entre pasar un objeto (creado con new ) y pasar el primitivo ( myVar = 'my-value'; ).
Por ejemplo, intente algo como:
var myObject = new String('my value'); var myPrimitive = 'my value'; function myFunc(x) { x.mutation = 'my other value'; } myFunc(myObject); myFunc(myPrimitive); console.log('myObject.mutation:', myObject.mutation); console.log('myPrimitive.mutation:', myPrimitive.mutation);Que debería dar salida:
myObject.mutation: my other value myPrimitive.mutation: undefinedTenga en cuenta que lo mismo se aplica a TypeScript y al tipo de
Numbertambién.
let/var no están relacionados con Typescript, están relacionados con Javascript:
¿Cuál es la diferencia entre usar "let" y "var"?
La cadena creada llamando a "nueva Cadena ()" es un tipo de objeto y debe evitarlo.
En el segundo y tercer caso, "Cadena" es un objeto de Javascript que se utiliza para crear cadenas, "cadena" es un tipo de mecanografiado que debe utilizarse para escribir variables de cadena.