Adakah yang tahu perbedaan antara String dan string dalam TypeScript? Apakah saya benar berasumsi bahwa mereka harus sama?
var a: String = "test";
var b: string = "another test";
a = b;
b = a; // this gives a compiler error!
Versi saat ini dari kompiler mengatakan:
Type 'String' is not assignable to type 'string'.
'string' is a primitive, but 'String' is a wrapper object.
Prefer using 'string' when possible.
Apakah itu bug?
typescript
Paul0515
sumber
sumber
Jawaban:
Berikut adalah contoh yang menunjukkan perbedaan, yang akan membantu penjelasannya.
String
adalah tipe String JavaScript, yang dapat Anda gunakan untuk membuat string baru. Tidak ada yang melakukan ini seperti dalam JavaScript literal dianggap lebih baik, jadis2
dalam contoh di atas membuat string baru tanpa menggunakannew
kata kunci dan tanpa secara eksplisit menggunakanString
objek.string
adalah tipe string TypeScript, yang bisa Anda gunakan untuk mengetik variabel, parameter, dan mengembalikan nilai.Catatan tambahan...
Saat ini (Feb 2013) Keduanya
s1
dans2
adalah JavaScript yang valid.s3
adalah TypeScript yang valid.Penggunaan
String
. Anda mungkin tidak perlu menggunakannya, string literal diterima secara universal sebagai cara yang tepat untuk menginisialisasi string. Dalam JavaScript, juga dianggap lebih baik menggunakan literal objek dan literal array juga:Jika Anda benar-benar memiliki kecenderungan untuk string, Anda dapat menggunakannya dalam TypeScript dalam salah satu dari dua cara ...
sumber
string
jenis dan inisialisasi literal:var s: string = "My String";
.var s: string = "My String"
identik denganvar s = "My String"
... juga, tidak peduli berapa kali saya membaca jawaban ini, saya masih tidak memahami tujuan daristring
tipe dalam TypeScript, karena, pada akhir hari ,('My String')['constructor'] === String
...Kedua jenis ini berbeda dalam JavaScript dan juga TypeScript - TypeScript hanya memberi kita sintaksis untuk membubuhi keterangan dan memeriksa jenis saat kita melanjutkan.
String
mengacu pada contoh objek yang memilikiString.prototype
rantai prototipe. Anda bisa mendapatkan contoh seperti itu dengan berbagai cara misalnyanew String('foo')
danObject('foo')
. Anda dapat menguji untuk instance dariString
jenis denganinstanceof
operator, misalnyamyString instanceof String
.string
adalah salah satu tipe primitif JavaScript, danstring
nilai utamanya dibuat dengan literal misalnya'foo'
dan"bar"
, dan sebagai tipe hasil dari berbagai fungsi dan operator. Anda dapat menguji untukstring
jenis menggunakantypeof myString === 'string'
.Sebagian besar waktu,
string
adalah jenis yang harus Anda gunakan - hampir semua antarmuka API yang mengambil atau mengembalikan string akan menggunakannya. Semua tipe primitif JS akan dibungkus ( kotak ) dengan tipe objek yang sesuai ketika menggunakannya sebagai objek, misalnya mengakses properti atau metode panggilan. KarenaString
saat ini dideklarasikan sebagai antarmuka daripada kelas di pustaka inti TypeScript , pengetikan struktural berartistring
subtipeString
yang menjadi alasan mengapa baris pertama Anda melewati pemeriksaan jenis kompilasi.sumber
Dalam JavaScript, string dapat berupa tipe primitif string atau objek string. Kode berikut menunjukkan perbedaan:
Kesalahan Anda:
Dilemparkan oleh kompiler TS karena Anda mencoba menetapkan tipe
string
ke tipe objek string (dibuat melaluinew
kata kunci). Compiler memberi tahu Anda bahwa Anda harus menggunakan tipestring
hanya untuk tipe primitif string dan Anda tidak bisa menggunakan tipe ini untuk menggambarkan tipe objek string.sumber
TypeScript:
String
vsstring
demo
sumber
Untuk pembaca cepat:
Jangan pernah menggunakan tipe Number, String , Boolean, Symbol, atau Object. Tipe-tipe ini merujuk pada objek kotak non-primitif yang hampir tidak pernah digunakan secara tepat dalam kode JavaScript.
sumber