UNPKG

@harmoniclabs/plu-ts-onchain

Version:

An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript

13 lines (12 loc) 965 B
export type Head<Types extends any[]> = Types extends [infer First, ...any[]] ? First : never; export type Tail<Types extends any[]> = Types extends [any, ...infer Lasts extends any[]] ? Lasts : never; export type NonEmptyTail<Types extends [any, ...any[]]> = Types extends [any, infer Snd] ? [Snd] : Types extends [any, infer Snd, ...infer Lasts extends any[]] ? [Snd, ...Lasts] : never; export type Last<Types extends any[]> = Types extends [...any[], infer Last] ? Last : never; export type Init<Types extends any[]> = Types extends [...infer All, any] ? All : never; export type VoidIfEmpty<Arr extends Array<any>> = Arr extends [] ? void : Arr; export type NoInfer<T> = T & { [K in keyof T]: T[K]; }; export type DefaultUndefined<A, Def> = A extends undefined ? Def : A; export type DefaultNever<A, Def> = A extends never ? Def : A; export type ConcreteInstanceType<T extends new (...args: any) => any> = T extends new (...args: any) => infer R ? R : any;