language - typescript official documentation
Tipos primitivos de tipografía: cualquier diferencia entre los tipos "número" y "número"(¿TSC no distingue entre mayúsculas y minúsculas)? (2)
JavaScript tiene la noción de tipos primitivos (número, cadena, etc.) y tipos de objetos (Número, Cadena, etc., que se manifiestan en el tiempo de ejecución). El number
y el number
tipos de TypeScript se refieren a ellos, respectivamente. JavaScript generalmente forzará un tipo de objeto a su equivalente primitivo, o viceversa:
var x = new Number(34);
> undefined
x
> Number {}
x + 1
> 35
Las reglas del sistema de tipo TypeScript tratan esto (especificación sección 3.7) de esta manera:
Para determinar las relaciones de subtipo, supertipo y compatibilidad de asignación, los tipos de primitiva Número, Booleano y Cadena se tratan como tipos de objetos con las mismas propiedades que las interfaces ''Número'', ''Booleano'' y ''Cadena'', respectivamente.
Me refería a escribir un parámetro de tipo number
, pero escribí mal el tipo, escribiendo el Number
lugar.
En mi IDE (JetBrains WebStorm), el tipo Number
está escrito con el mismo color que se utiliza para el number
tipo primitivo, mientras que si escribo el nombre de una clase (conocida o desconocida) utiliza un color diferente, así que supongo que de alguna manera reconoce el tipo incorrectamente escrito como correcto / casi correcto / tipo correcto.
Cuando compilo el código, en lugar de quejarme, por ejemplo, de que el compilador no pudo encontrar una clase llamada Number
, TSC escribe este mensaje de error:
Illegal property access
¿Eso significa que el number
y el Number
ambos coexisten como tipos diferentes?
Si esto es cierto, ¿cuál es la diferencia entre esas clases?
Si este no es el caso, entonces por qué simplemente no escribió el mismo mensaje de error que muestra para las clases desconocidas ("El nombre ''Número'' no existe en el alcance actual")
Este es el código:
class Test
{
private myArray:string[] = ["Jack", "Jill", "John", "Joe", "Jeff"];
// THIS WORKS
public getValue(index:number):string
{
return this.myArray[index];
}
// THIS DOESN''T WORK: ILLEGAL PROPERTY ACCESS
public getAnotherValue(index:Number):string
{
return this.myArray[index];
}
}
Para aumentar la respuesta de Ryan con la orientación de lo que se debe y no se debe hacer en TypeScript :
Nunca use los tipos Number, String, Boolean u Object. Estos tipos se refieren a objetos en caja no primitivos que casi nunca se usan apropiadamente en el código JavaScript.
/* WRONG */ function reverse(s: String): String;
Utilice los números number, string y boolean.
/* OK */ function reverse(s: string): string;