Variadic Tuples
_Variadic tuples_ memberikan kemampuan pada _tuple_ untuk menangani
operator _rest_ (...) untuk memberikan tipe data pada pemeriksa tipe
data dengan cara yang mirip dengan tipe generik.
_Variadic tuples_ merupakan topik yang rumit, sehingga Anda tidak perlu
khawatir bila Anda merasa kebingungan. Contoh di bawah berdasarkan
example:generic-functions dan example:tuples.
Sebagai permulaan, di bawah ini merupakan sebuah _variadic tuple_ yang
akan selalu memberikan prefiks pada _tuple_ lain dengan sebuah bilangan:
// ^ Tipe generik digunakan untuk
membatasi T
^ Operator `...` digunakan
untuk mengetahui letak
penggabungan
Tipe data di atas dapat digunakan untuk komposisi:
type AddMax
// Mekanisme ini dapat digabungkan dengan banyak parameter masukan.
Sebagai contoh, fungsi di bawah ini menggabungkan dua buah _array_
namun menggunakan '\0' sebagai karakter yang menjadi tanda
dimana _array_ dimulai dan berakhir.
type MaxMin = AddMax<[min: number]>
type MaxMinDiameter = AddMax<[min: number, diameter: number]>
// Hal yang sama juga digunakan setelah penggunaan _tuple_:
type SuffixDIContext
// TypeScript dapat menyimpulkan tipe data kembalian dari sebuah
fungsi seperti berikut:
function joinWithNullTerminators
//
Perkakas ini memungkinkan kita untuk memberi tipe data
pada sebuah fungsi seperti fungsi untuk _currying_
yang merupakan sebuah konsep yang sering digunakan
pada pemrograman fungsional:
const result = joinWithNullTerminators(['variadic', 'types'], ["terminators", 3]);
// Ada 3 parameter generik:
- T: Kumpulan masukan yang digunakan pada fungsi _curry_
- U: Kumpulan masukan yang tidak digunakan pada fungsi
_curry_, dan harus diteruskan pada fungsi yang dikembalikan
- R: Tipe kembalian dari fungsi yang diberikan
function curry
// Anda dapat mempelajari lebih lanjut tentang _variadic tuples_,
beserta dengan contoh kode programnya pada:
https://github.com/microsoft/TypeScript/pull/39094
const sum = (left: number, right: number,) => left + right
const a = curry(sum, 1, 2)
const b = curry(sum, 1)(2)
const c = curry(sum)(1, 2)