Mengatasi Masalah Union Number dengan Inputan Number di TypeScript

I am an enthusiastic researcher and developer with a passion for using technology to innovate in business and education.
Search for a command to run...

I am an enthusiastic researcher and developer with a passion for using technology to innovate in business and education.
No comments yet. Be the first to comment.
Ringkasan: Jika OpenClaw adalah AI Operating System yang menghubungkan berbagai layanan dan agent, maka Hermes adalah AI Worker yang fokus mengerjakan pekerjaan, belajar dari pengalaman, dan semakin p

Ketika membangun aplikasi modern seperti Next.js, Cloudflare Workers, platform AI, microservices, atau real-time dashboard, ada banyak istilah jaringan yang sering muncul: TCP, UDP, HTTP/2, QUIC, WebS

Setiap tahun, ribuan mahasiswa jurusan Teknologi Informasi, Sistem Informasi, dan Teknik Informatika diwisuda. Namun, tidak sedikit di antara mereka yang kemudian menghadapi kenyataan yang cukup berat

Jika Anda menggunakan Next.js, kemungkinan besar Anda pernah mendengar anggapan bahwa: "Next.js = Vercel" Padahal kenyataannya tidak harus demikian. Di sinilah OpenNext hadir. OpenNext adalah proyek

Saat pertama kali mencoba OpenCode Go, saya hampir langsung berlangganan tanpa membaca detail program yang mereka sediakan. Untungnya saya menemukan bahwa OpenCode memiliki program referral yang membe

Union number adalah fitur di TypeScript yang memungkinkan Anda mendefinisikan sebuah tipe sebagai kumpulan nilai numerik tertentu. Misalnya, Anda mungkin memiliki sebuah tipe yang hanya menerima angka tertentu, seperti 1 | 2 | 3. Namun, ketika menerima input berupa angka umum (number), Anda perlu memverifikasi apakah angka tersebut sesuai dengan nilai-nilai yang diperbolehkan di dalam union. Artikel ini akan membahas cara mengatasi masalah tersebut.
Union number adalah kombinasi tipe numerik yang hanya memperbolehkan nilai tertentu. Contoh:
type AllowedNumbers = 1 | 2 | 3 | 4 | 5;
Pada tipe AllowedNumbers, hanya angka 1, 2, 3, 4, dan 5 yang diizinkan. Namun, jika fungsi Anda menerima input tipe number, Anda perlu memastikan bahwa nilai tersebut adalah bagian dari AllowedNumbers.
Ada beberapa pendekatan yang bisa digunakan untuk memvalidasi input terhadap tipe union number.
Pendekatan ini menggunakan metode Array.includes untuk memeriksa apakah input ada di dalam daftar nilai yang diizinkan.
type AllowedNumbers = 1 | 2 | 3 | 4 | 5;
function processNumber(input: number): AllowedNumbers | null {
if ([1, 2, 3, 4, 5].includes(input)) {
return input as AllowedNumbers;
}
return null; // Mengembalikan null jika input tidak valid
}
// Contoh penggunaan
const result = processNumber(3); // Output: 3
const invalidResult = processNumber(10); // Output: null
Jika Anda yakin bahwa input akan valid, Anda dapat menggunakan assertion untuk memastikan tipe. Namun, pendekatan ini hanya aman jika Anda dapat menjamin validitas input.
type AllowedNumbers = 1 | 2 | 3 | 4 | 5;
function assertAllowedNumber(input: number): AllowedNumbers {
if (![1, 2, 3, 4, 5].includes(input)) {
throw new Error("Input is not a valid AllowedNumber");
}
return input as AllowedNumbers;
}
// Contoh penggunaan
try {
const safeNumber = assertAllowedNumber(3); // Output: 3
} catch (e) {
console.error(e); // Jika input tidak valid
}
keyofPendekatan ini lebih fleksibel dan aman untuk jumlah nilai yang lebih besar. Anda dapat memanfaatkan objek statis untuk mendefinisikan nilai yang diperbolehkan.
const allowedNumbersMap = {
1: true,
2: true,
3: true,
4: true,
5: true,
} as const;
type AllowedNumbers = keyof typeof allowedNumbersMap;
function isAllowedNumber(input: number): input is AllowedNumbers {
return input in allowedNumbersMap;
}
function processNumber(input: number): AllowedNumbers | null {
if (isAllowedNumber(input)) {
return input;
}
return null; // Jika input tidak valid
}
// Contoh penggunaan
const validResult = processNumber(3); // Output: 3
const invalidResult = processNumber(10); // Output: null
Keuntungan: Mudah diimplementasikan dan cukup untuk daftar kecil nilai.
Kelemahan: Tidak optimal untuk daftar nilai yang besar karena memerlukan iterasi setiap kali.
Keuntungan: Singkat dan cocok untuk kondisi di mana validitas input sudah dijamin.
Kelemahan: Tidak aman jika input tidak terjamin valid.
keyofKeuntungan: Lebih aman, cepat, dan fleksibel untuk daftar besar nilai.
Kelemahan: Membutuhkan definisi objek tambahan.
Memvalidasi input terhadap union number di TypeScript adalah langkah penting untuk memastikan tipe data yang konsisten dan aman. Anda dapat memilih pendekatan yang sesuai dengan kebutuhan berdasarkan kompleksitas aplikasi dan jumlah nilai yang diperbolehkan.
Gunakan pendekatan Array.includes untuk kasus sederhana, assertion jika validitas input terjamin, dan object mapping untuk daftar besar nilai. Dengan cara ini, Anda dapat menangani union number dengan lebih efektif dan aman.