TypeScript - Tipe Any: Kapal Samping Switzerland of Types
Hailah, bintang-bintang pemrograman masa depan! Hari ini, kita akan melihat salah satu ciri paling adaptif (dan kadang-kadang kontroversial) TypeScript: tipe any
. Siapkan sabuk pengaman, karena kita akan melakukan perjalanan yang akan membuat Anda katakan, "Any-thing is possible!" (Maaf, saya tidak bisa menahan diri untuk membuat pemainan kata tersebut!)
Apa Itu Tipe Any?
Sebelum kita masuk ke dalam, mari kita bayangkan Anda di acara makanan berupa potluck. Anda membawa makanan, tetapi Anda tidak yakin apa yang dibawa oleh orang lain. Itu seperti tipe any
di TypeScript - itu dapat menyimpan nilai jenis apa pun, sama seperti piring Anda di potluck dapat menyimpan jenis makanan apa pun!
Dapat mewakili nilai apa pun
Tipe any
adalah seperti yang namanya - itu dapat mewakili nilai apa pun di TypeScript. Itu seperti selembar kartu joker yang mengatakan, "Hai TypeScript, saya bisa menjadi apa yang saya inginkan!"
mari kita lihat beberapa contoh:
let myVariable: any = 42;
console.log(myVariable); // Output: 42
myVariable = "Hello, World!";
console.log(myVariable); // Output: Hello, World!
myVariable = true;
console.log(myVariable); // Output: true
myVariable = [1, 2, 3];
console.log(myVariable); // Output: [1, 2, 3]
Dalam contoh ini, kita mendeklarasikan myVariable
sebagai tipe any
. Kemudian kita tentukan nilai jenis yang berbeda kepadanya - sebuah bilangan, sebuah string, sebuah boolean, dan sebuah array. TypeScript tidak mengeluh karena any
bisa, well, apa saja!
Parameter Fungsi Tipe any
Sekarang, mari kita katakan Anda membuat sebuah fungsi yang harus sangat fleksibel. Anda inginnya menerima parameter jenis apa pun. Itu di mana any
berguna!
function printAnything(arg: any): void {
console.log(arg);
}
printAnything(42); // Output: 42
printAnything("TypeScript"); // Output: TypeScript
printAnything([1, 2, 3]); // Output: [1, 2, 3]
Dalam contoh ini, fungsi printAnything
kita dapat menerima argumen jenis apa pun. Itu seperti seorang bouncer yang ramah di klub yang membolehkan semua orang masuk!
Objek Tipe any
kadang-kadang, Anda mungkin ingin membuat sebuah objek yang dapat memiliki properti jenis apa pun. Mari kita buat sebuah begi ajaib yang dapat menyimpan apa saja:
let magicalBag: { [key: string]: any } = {};
magicalBag.book = "Harry Potter";
magicalBag.wand = { wood: "Holly", core: "Phoenix feather" };
magicalBag.spells = ["Expelliarmus", "Lumos", "Accio"];
console.log(magicalBag);
// Output:
// {
// book: "Harry Potter",
// wand: { wood: "Holly", core: "Phoenix feather" },
// spells: ["Expelliarmus", "Lumos", "Accio"]
// }
Di sini, magicalBag
adalah sebuah objek yang dapat memiliki properti sebanyak apa pun, masing-masing dapat memiliki jenis apa pun. Itu seperti begi Mary Poppins - itu dapat menyimpan apa saja!
Mengapa Menggunakan Tipe any?
Anda mungkin berpikir, "Jika TypeScript tentang jenis, mengapa kita ingin menggunakan any
?" Pertanyaan bagus! Berikut adalah beberapa konteks di mana any
dapat berguna:
- Ketika bekerja dengan konten dinamis (seperti data dari API)
- Ketika secara bertahap mengubah proyek JavaScript ke TypeScript
- Ketika berurusan dengan pustaka pihak ketiga yang tidak memiliki definisi jenis
mari kita lihat contoh kerja dengan konten dinamis:
async function fetchUserData(userId: number): Promise<any> {
const response = await fetch(`https://api.example.com/users/${userId}`);
const userData = await response.json();
return userData; // Kita tidak tahu struktur pasti `userData`, jadi kita gunakan 'any'
}
// Penggunaan
fetchUserData(123).then(user => {
console.log(user.name); // TypeScript tidak akan mengeluh, bahkan jika 'name' tidak ada
});
Dalam kasus ini, kita tidak yakin tentang struktur data yang kita terima, jadi kita gunakan any
untuk mengatakan ke TypeScript, " Percayalah, saya tahu apa yang saya lakukan!"
Aserersi Jenis
kadang-kadang, Anda mungkin tahu lebih banyak tentang jenis suatu nilai daripada TypeScript. Itu di mana asersi jenis berguna. Itu seperti mengatakan ke TypeScript, "Saya tahu Anda pikir ini adalah any
, tapi percayalah, ini jenis spesifik."
mari kita lihat bagaimana Anda bisa menggunakan asersi jenis:
let someValue: any = "Hello, TypeScript!";
let strLength: number = (someValue as string).length;
console.log(strLength); // Output: 20
Dalam contoh ini, kita mengatakan ke TypeScript, "Hey, saya tahu someValue
adalah jenis any
, tapi saya yakin ini adalah string. Jadi biarkan saya menggunakannya sebagai string."
Peringatan: Dengan Kekuatan yang Besar, datang Tanggung Jawab yang Besar
Meskipun any
kuat, itu seharusnya digunakan dengan hati-hati. Ingat, keuntungan utama TypeScript adalah pemeriksaan jenis. Dengan menggunakan any
, Anda secara efektif mengatakan ke TypeScript untuk mematikan pemeriksaan jenis untuk variabel itu.
Berikut adalah contoh bagaimana any
dapat menyebabkan kesalahan runtime:
let num: any = "42";
console.log(num.toFixed(2)); // Ini akan menyebabkan kesalahan runtime!
TypeScript tidak akan mengeluh tentang kode ini, tetapi itu akan melempar kesalahan saat Anda menjalankan itu karena string tidak memiliki metode toFixed
.
Any vs. Unknown: Alternatif yang Lebih Aman
TypeScript 3.0 memperkenalkan jenis unknown
, yang adalah lawan jenis aman dari any
. Sementara any
membolehkan Anda melakukan apa saja tanpa pemeriksaan, unknown
memaksa pemeriksaan jenis.
mari kita bandingkan any
dan unknown
:
let anyVar: any = 10;
let unknownVar: unknown = 10;
let s1: string = anyVar; // OK
let s2: string = unknownVar; // Kesalahan: Jenis 'unknown' tidak dapat ditetapkan ke jenis 'string'
// Kita perlu memeriksa jenis sebelum menggunakan `unknownVar`
if (typeof unknownVar === 'string') {
let s3: string = unknownVar; // OK
}
Seperti yang Anda lihat, unknown
lebih aman karena ia memaksa Anda untuk memeriksa jenis sebelum menggunakannya.
Tabel Metode
Berikut adalah tabel metode umum yang Anda mungkin gunakan dengan any
:
Metode | Deskripsi | Contoh |
---|---|---|
typeof |
Mengembalikan string yang menunjukkan jenis operand yang belum dievaluasi | typeof anyVar === 'string' |
instanceof |
Menguji apakah prototype properti kontruktur muncul di mana saja dalam rantai prototype objek | anyVar instanceof Array |
Aserersi jenis | Memberitahu compiler untuk menganggap nilai sebagai jenis tertentu | (anyVar as string).length |
Penjaga jenis | Predikat jenis yang ditentukan pengguna untuk membantu membatasi jenis variabel | if (isString(anyVar)) { ... } |
Ingat, dengan any
, Anda dapat menggunakan semua metode yang tersedia di JavaScript, tetapi Anda kehilangan keuntungan pemeriksaan jenis TypeScript.
Dan itu dia, teman-teman! Anda baru saja melakukan penyelaman mendalam ke dunia tipe any
di TypeScript. Ingat, meskipun any
dapat menjadi alat yang kuat, gunakannya bijaksana dan bertanggung jawab. Selamat memesan, dan may the types be ever in your favor!
Credits: Image by storyset