Skip to content

Instantly share code, notes, and snippets.

View gtkatakura's full-sized avatar

gtkatakura

View GitHub Profile
// funciona somente com v3.1.6, essa estrategia de end/continue
// era um backdoor para fazer recursao em types, recursao funcionava somente com interfaces
// antigamente pela resolucao de tipos ser lazyness e nao acabar fazendo o compiler cair
// potencialmente em um looping infinito na resolucao do tipo, por causa disto tem validacao
// no compiler agora e codigos nesse estilo sao barrados pelo compiler
type Init<T extends any[], TTail extends any[] = TailArray<T>> = CastArray<{
[K in keyof TTail]: T[keyof T & K];
}>
type TailArgs<T extends Function> =
T extends (head, ...tail: infer TTail) => any ? TTail :
unknown
type Tail<T extends Array<any>> = TailArgs<(...args: T) => any>
type YeahBaby = Tail<[1, 2, 3, 4]> // type YeahBaby = [2, 3, 4]