Quería escribir un parámetro de tipo number
, pero escribí mal el tipo, escribiendo en su Number
lugar.
En mi IDE (JetBrains WebStorm) el tipo Number
está escrito con el mismo color que se usa para el tipo primitivo number
, mientras que si escribo el nombre de una clase (conocida o desconocida) usa un color diferente, así que supongo que de alguna manera reconoce el tipo mal escrito como correcto / casi correcto / tipo de tipo correcto.
Cuando compilo el código, en lugar de quejarme, por ejemplo, de que el compilador no pudo encontrar una clase nombrada Number
, TSC escribe este mensaje de error:
Illegal property access
¿Quiere decir que number
y Number
tanto coexiste como diferentes tipos?
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];
}
}
fuente
Para aumentar la respuesta de Ryan con la orientación de lo que se debe y no se debe hacer en TypeScript :
fuente
[]
para denotar tipos de matriz. Sin embargo, puede haber excepciones, no estoy seguro.Como dice el documento de TypeScript:
var Number: NumberConstructor (value?: any) => number
Como dice, tome
any
como parámetro y devuelva el número onull
Ofrece una forma sencilla de comprobar si un valor es un número o no
Number("1234"); // 1234 Number("1234.54") // 1234.54 Number("-1234.54") // -1234.54 Number("1234.54.33") // null Number("any-non-numeric") // null
Así que simplemente podemos usar para verificar el número, como:
if(Number(val)){ console.log('val is a number'); } else { console.log('Not a number'); }
fuente