export interface Constructable < T = unknown > { new ( ... args ) : T ; } export interface Positional < T extends Array < unknown > > { positional : T ; } export interface Named < T extends { } = Record < string , unknown > > { named : T ; } export interface LooseArgs { positional ? : unknown [ ] ; named ? : { } ; } export interface ArgsWrapper { positional ? : unknown [ ] ; named ? : Record < string , unknown > ; } export interface Cache < T = unknown > { _ : T ; } export interface Helper { } export type Thunk = ( ( ) => [ ] ) | ( ( ) => void ) | ( ( ) => Required < ArgsWrapper > [ 'positional' ] ) | ( ( ) => Required < ArgsWrapper > [ 'named' ] ) | ( ( ) => ArgsWrapper ) ;