Saya bermaksud menulis parameter tipe number
, tetapi saya salah mengeja tipe, Number
sebagai gantinya menulis .
Di IDE saya (JetBrains WebStorm), jenisnya Number
ditulis dengan warna yang sama yang digunakan untuk jenis primitif number
, sedangkan jika saya menulis nama kelas (diketahui atau tidak dikenal) menggunakan warna yang berbeda, jadi saya rasa entah bagaimana ia mengenali jenis yang salah eja sebagai jenis yang benar / hampir benar / semacam-dari-benar.
Ketika saya mengkompilasi kode, alih-alih mengeluh misalnya bahwa kompiler tidak dapat menemukan kelas bernama Number
, TSC menulis pesan kesalahan ini:
Illegal property access
Apakah itu berarti bahwa number
dan Number
keduanya hidup berdampingan sebagai tipe yang berbeda?
Jika ini benar, manakah perbedaan antara kelas-kelas itu?
Jika ini bukan masalahnya, mengapa itu tidak menulis pesan kesalahan yang sama yang ditampilkan untuk kelas yang tidak dikenal ("Nama 'Nomor' tidak ada dalam cakupan saat ini")
Ini kodenya:
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];
}
}
sumber
Untuk menambah jawaban Ryan dengan panduan dari TypeScript Do's and Don'ts :
sumber
[]
untuk menunjukkan tipe array. Mungkin ada pengecualian, saya tidak yakin.Seperti yang dikatakan dokumen TypeScript:
var Number: NumberConstructor (value?: any) => number
Seperti yang dikatakan, ambil
any
sebagai parameter dan kembalikan nomor ataunull
Ini memberikan cara mudah untuk memeriksa suatu nilai adalah angka atau tidak
Number("1234"); // 1234 Number("1234.54") // 1234.54 Number("-1234.54") // -1234.54 Number("1234.54.33") // null Number("any-non-numeric") // null
Jadi sederhananya bisa kita gunakan untuk mengecek nomor tersebut, seperti:
if(Number(val)){ console.log('val is a number'); } else { console.log('Not a number'); }
sumber