Tipe Data Dalam TypeScript
Tipe Data Dalam TypeScript
Daftar Isi
Pendahuluan
TypeScript, sebagai superset dari JavaScript, menambahkan fitur static typing. Ini berarti setiap variabel, parameter fungsi, dan nilai kembalian fungsi memiliki tipe data yang jelas. Pendefinisian tipe data ini membantu mencegah kesalahan saat runtime, meningkatkan code readability, dan memfasilitasi refactoring. Memahami berbagai tipe data dalam TypeScript adalah kunci untuk menulis kode yang lebih robust dan mudah dipelihara.
Tipe Data Dasar
TypeScript menyediakan beberapa tipe data dasar yang mirip dengan JavaScript, tetapi dengan penambahan beberapa tipe yang lebih spesifik.
Boolean
Tipe data boolean
mewakili nilai kebenaran, yaitu true
atau false
.
let isDone: boolean = false;
let isEnabled: boolean = true;
Number
Tipe data number
mewakili angka, baik integer maupun floating-point. TypeScript, seperti JavaScript, tidak membedakan antara integer dan floating-point.
let decimal: number = 6;
let integer: number = 7;
let floatingPoint: number = 3.14;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
String
Tipe data string
mewakili teks. String dapat dideklarasikan menggunakan tanda kutip tunggal ('
), tanda kutip ganda ("
), atau template literals (``).
let color: string = "blue";
let fullName: string = 'John Doe';
let sentence: string = `Hello, my name is ${ fullName }.`;
Array
Tipe data array
mewakili kumpulan nilai dengan tipe data yang sama. Ada dua cara untuk mendeklarasikan tipe array:
- Menggunakan tipe data elemen diikuti dengan
[]
. - Menggunakan generic type
Array
.
let list1: number[] = [1, 2, 3];
let list2: Array = [1, 2, 3];
let names: string[] = ["Alice", "Bob", "Charlie"];
Tuple
Tipe data tuple
mewakili array dengan jumlah elemen yang tetap dan tipe data elemen yang mungkin berbeda. Tuple berguna ketika Anda ingin merepresentasikan struktur data yang memiliki urutan dan tipe data yang spesifik.
let person: [string, number] = ["John", 30];
// person[0] akan bertipe string
// person[1] akan bertipe number
Perhatikan bahwa TypeScript akan memberikan error jika Anda mencoba mengakses elemen di luar panjang tuple atau memberikan nilai dengan tipe data yang salah.
Enum
Tipe data enum
mewakili kumpulan nilai bernama (enumerasi). Enum berguna untuk mendefinisikan set konstanta yang terkait satu sama lain.
enum Color {
Red,
Green,
Blue,
}
let c: Color = Color.Green; // c bernilai 1 (secara default, dimulai dari 0)
enum StatusCode {
OK = 200,
NotFound = 404,
InternalServerError = 500,
}
let status: StatusCode = StatusCode.NotFound; // status bernilai 404
Any
Tipe data any
mewakili tipe data apa pun. Menggunakan any
akan menonaktifkan type checking untuk variabel tersebut. Gunakan any
dengan hati-hati, karena dapat mengurangi manfaat dari menggunakan TypeScript.
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false;
any
berguna dalam situasi di mana Anda tidak tahu tipe data variabel pada saat kompilasi, atau ketika Anda bermigrasi dari JavaScript ke TypeScript secara bertahap.
Void
Tipe data void
mewakili tidak adanya nilai. Biasanya digunakan sebagai tipe kembalian fungsi yang tidak mengembalikan nilai apa pun.
function warnUser(): void {
console.log("This is a warning message");
}
Anda juga dapat mendeklarasikan variabel bertipe void
, tetapi hanya dapat diberikan nilai null
atau undefined
(hanya jika --strictNullChecks
tidak diaktifkan).
Null dan Undefined
Tipe data null
dan undefined
masing-masing mewakili nilai null dan undefined. Secara default, null
dan undefined
adalah subtype dari semua tipe data lain. Namun, dengan mengaktifkan opsi --strictNullChecks
, null
dan undefined
hanya dapat diberikan ke tipe data any
dan tipe data mereka sendiri.
let u: undefined = undefined;
let n: null = null;
// Dengan --strictNullChecks diaktifkan:
let x: number | undefined = undefined; // OK
let y: number = null; // Error
Never
Tipe data never
mewakili tipe data yang tidak pernah terjadi. Biasanya digunakan sebagai tipe kembalian fungsi yang selalu melempar error atau tidak pernah selesai dieksekusi.
// Fungsi yang selalu melempar error
function error(message: string): never {
throw new Error(message);
}
// Fungsi yang tidak pernah selesai dieksekusi
function infiniteLoop(): never {
while (true) {}
}
Object
Tipe data object
mewakili tipe non-primitif, yaitu segala sesuatu yang bukan number
, string
, boolean
, symbol
, null
, atau undefined
.
let obj: object = { name: "John", age: 30 };
Perhatikan bahwa object
hanya menyatakan bahwa variabel adalah objek, tetapi tidak memberikan informasi lebih lanjut tentang properti objek tersebut. Untuk mendefinisikan struktur objek yang lebih spesifik, gunakan interface atau type aliases (akan dibahas di bagian selanjutnya).
Tipe Data Lanjutan
Selain tipe data dasar, TypeScript juga menyediakan beberapa tipe data lanjutan yang memungkinkan Anda mendefinisikan tipe data yang lebih kompleks dan fleksibel.
Union Types
Union types memungkinkan sebuah variabel atau parameter fungsi untuk memiliki beberapa tipe data yang berbeda.
let code: string | number = 123;
code = "ABC";
Dalam contoh di atas, variabel code
dapat bertipe string
atau number
. Anda dapat menggunakan operator |
untuk menggabungkan beberapa tipe data menjadi union type.
Intersection Types
Intersection types menggabungkan beberapa tipe data menjadi satu tipe data baru yang memiliki semua properti dari tipe data yang digabungkan.
interface Person {
name: string;
}
interface Loggable {
log(): void;
}
type LoggablePerson = Person & Loggable;
let person: LoggablePerson = {
name: "John",
log: () => console.log("Name: John"),
};
Dalam contoh di atas, tipe data LoggablePerson
memiliki properti name
dari interface Person
dan method log
dari interface Loggable
. Anda dapat menggunakan operator &
untuk menggabungkan beberapa tipe data menjadi intersection type.
Literal Types
Literal types memungkinkan Anda menentukan nilai spesifik yang dapat diberikan ke variabel atau parameter fungsi.
type Direction = "North" | "East" | "South" | "West";
let direction: Direction = "North"; // OK
// let direction: Direction = "Northeast"; // Error
Dalam contoh di atas, variabel direction
hanya dapat diberikan nilai "North", "East", "South", atau "West". Literal types berguna untuk membatasi nilai yang valid untuk variabel atau parameter fungsi.
Type Aliases
Type aliases memungkinkan Anda memberikan nama alias untuk tipe data yang sudah ada. Type aliases berguna untuk menyederhanakan tipe data yang kompleks atau untuk memberikan nama yang lebih deskriptif.
type StringOrNumber = string | number;
let code: StringOrNumber = 123;
code = "ABC";
Dalam contoh di atas, tipe alias StringOrNumber
mendefinisikan union type yang dapat bertipe string
atau number
. Anda dapat menggunakan keyword type
untuk mendefinisikan type alias.
Type Inference (Inferensi Tipe)
TypeScript memiliki fitur type inference, yang memungkinkan compiler untuk menyimpulkan tipe data variabel atau parameter fungsi secara otomatis berdasarkan nilai yang diberikan atau konteks penggunaannya.
let message = "Hello, TypeScript!"; // TypeScript akan menyimpulkan bahwa message bertipe string
function add(x: number, y: number) {
return x + y; // TypeScript akan menyimpulkan bahwa tipe kembalian fungsi add adalah number
}
Meskipun type inference dapat mengurangi boilerplate code, disarankan untuk secara eksplisit mendeklarasikan tipe data untuk variabel dan parameter fungsi, terutama dalam kode yang kompleks. Ini akan meningkatkan code readability dan mencegah kesalahan yang tidak terduga.
Type Assertions (Asersi Tipe)
Type assertions memungkinkan Anda untuk memberitahu compiler TypeScript tentang tipe data variabel atau ekspresi secara manual. Type assertions berguna ketika Anda tahu lebih banyak tentang tipe data variabel daripada yang diketahui oleh compiler.
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
let strLength2: number = (someValue).length; // Sintaks alternatif
Ada dua cara untuk melakukan type assertions:
- Menggunakan keyword
as
. - Menggunakan sudut kurung (
<>
).
Perhatikan bahwa type assertions tidak mengubah tipe data variabel pada saat runtime. Type assertions hanya memberitahu compiler untuk memperlakukan variabel seolah-olah memiliki tipe data tertentu.
Tips Penggunaan Tipe Data
Berikut adalah beberapa tips untuk menggunakan tipe data dalam TypeScript secara efektif:
- Gunakan tipe data eksplisit: Meskipun type inference dapat membantu, sebaiknya deklarasikan tipe data secara eksplisit untuk variabel, parameter fungsi, dan nilai kembalian fungsi.
- Manfaatkan interface dan type aliases: Gunakan interface dan type aliases untuk mendefinisikan struktur data yang kompleks dan untuk memberikan nama yang lebih deskriptif untuk tipe data.
- Gunakan union types dan intersection types: Gunakan union types dan intersection types untuk mendefinisikan tipe data yang lebih fleksibel dan untuk merepresentasikan hubungan antara tipe data yang berbeda.
- Gunakan literal types: Gunakan literal types untuk membatasi nilai yang valid untuk variabel atau parameter fungsi.
- Gunakan type assertions dengan hati-hati: Hanya gunakan type assertions ketika Anda yakin bahwa Anda tahu lebih banyak tentang tipe data variabel daripada yang diketahui oleh compiler.
Penutup
Memahami berbagai tipe data dalam TypeScript adalah kunci untuk menulis kode yang lebih robust, mudah dibaca, dan mudah dipelihara. Dengan memanfaatkan fitur-fitur static typing yang ditawarkan oleh TypeScript, Anda dapat mencegah kesalahan saat runtime, meningkatkan code readability, dan memfasilitasi refactoring. Teruslah berlatih dan bereksperimen dengan berbagai tipe data dalam TypeScript untuk memperdalam pemahaman Anda.
0 comments :
Post a Comment