Chciałem napisać parametr typu number
, ale błędnie napisałem typ, pisząc Number
zamiast tego.
Na moim IDE (JetBrains WebStorm) typ Number
jest zapisany tym samym kolorem, który jest używany dla typu pierwotnego number
, natomiast jeśli napiszę nazwę klasy (znanej lub nieznanej), używa innego koloru, więc domyślam się, że jakoś rozpoznaje błędnie napisany typ jako poprawny / prawie poprawny / rodzaj-poprawny.
Kiedy kompiluję kod, zamiast narzekać na przykład, że kompilator nie mógł znaleźć klasy o nazwie Number
, TSC zapisuje następujący komunikat o błędzie:
Illegal property access
Czy to oznacza, że number
i Number
oba współistnieją jako różne typy?
Jeśli to prawda, jaka jest różnica między tymi klasami?
Jeśli tak nie jest, to dlaczego po prostu nie napisał tego samego komunikatu o błędzie, który wyświetla dla nieznanych klas („Nazwa„ Numer ”nie istnieje w bieżącym zakresie”)
To jest kod:
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];
}
}
źródło
Aby uzupełnić odpowiedź Ryana o wskazówki z TypeScript :
źródło
[]
do oznaczania typów tablic. Mogą być jednak wyjątki, nie jestem pewien.Jak mówi dokument TypeScript:
var Number: NumberConstructor (value?: any) => number
Jak mówi, weź
any
jako parametr i zwróć liczbę lubnull
Daje łatwy sposób sprawdzenia, czy wartość jest liczbą, czy nie
Number("1234"); // 1234 Number("1234.54") // 1234.54 Number("-1234.54") // -1234.54 Number("1234.54.33") // null Number("any-non-numeric") // null
Po prostu możemy użyć do sprawdzenia numeru, na przykład:
if(Number(val)){ console.log('val is a number'); } else { console.log('Not a number'); }
źródło