Variadic Tuples
Tuplas Variádicas dão às tuplas a abilidate de utilizar o operador rest (...)
para passar tipos através do verificador de tipos de uma forma que funciona
como generics.
Este é um tópico bastante avançado, então se você se sentir perdido não se preocupe.
Baseia-se no example:generic-functions e example:tuples
Para começar, aqui está uma tupla variádica que sempre prefixa outra tupla
com um número
// ^ Generic usada para restringir o T
^ ... usado para indicar onde mesclar
Isso pode ser usado para composição:
type AddMax
// Este mecanismo pode ser combinado com múltiplos parâmetros de entrada. Por exemplo,
esta função mescla dois arrays, mas usa '\0' como uma chave para indicar onde os arrays
começam e terminam.
type MaxMin = AddMax<[min: number]>
type MaxMinDiameter = AddMax<[min: number, diameter: number]>
// O mesmo pode ser usado após a tupla:
type SuffixDIContext
// Essas ferramentas tornam possível tipar corretamente uma função como curry,
um conceito muito usado na programação funcional
function joinWithNullTerminators
// Há três argumentos generics
- T: Os parâmetros que são um array de entradas para a função curry
- U: Os parâmetros que _não_ são passados na função curry, e precisam ser aplicados à função de retorno
- R: O tipo de retorno da função passada
function curry
// Você pode encontrar uma explicação mais detalhada, com mais exemplos de código em:
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)