import { PropertiesOfTypeT , TaggedT } from "type-ops" ; public export type Omit < T , ToRemove > = Pick < T , Exclude < keyof T , ToRemove > > ; public export type ExcludeKeys < T , ToRemove > = Omit < T , ToRemove > ; public export type ExcludeInterface < T , ToRemove > = ExcludeKeys < T , keyof ToRemove > ; remarks public export type KeysAssignableToAll < T , AllOf > = { [ K in keyof T ] : [ AllOf ] extends [ T [ K ] ] ? K : never ; } [ keyof T ] ; remarks public export type KeysAssignableToAny < T , AnyOf > = { [ K in keyof T ] : [ T [ K ] ] extends [ AnyOf ] ? K : never ; } [ keyof T ] ; public export type UniqueType = TaggedT < string , "UniqueType" > ; public export type PropertiesOfTypeAny < T extends object > = PropertiesOfTypeT < Required < T > , UniqueType > ; public export type FuncType < Args , Ret > = ( ... args : Args [ ] ) => Ret ; public export type ClassType < Args , Ret > = new ( ... args ) => Ret ; public export type ExtractType < T , Key extends keyof T > = T extends { [ Name in Key ] : infer Ret ; } ? Ret : T extends { [ Name in Key ] ? : infer Ret ; } ? Ret : never ; public export type Constructor < Inst extends object > = ( new ( ... args ) => Inst ) ; public export type Literal = string | number | boolean | undefined | null | void | { } ; remarks param args public export const tuple = < T extends Literal [ ] > ( ... args ) => args ; public export type TupleToUnion < T extends Literal [ ] > = T [ number ] ; export type FIXME_NeedsProperType = unknown ; public export type MaybePromise < T > = T | Promise < T > ; public export type MaybeArray < T > = T | T [ ] ; public export interface AnyObject { [ key ] : any ; [ key ] : any ; } public export type MethodNames < T > = Extract < { [ K in keyof T ] : Required < T > [ K ] extends ( ... args : any [ ] ) => any ? K : never ; } [ keyof T ] , string > ; remarks public export type ReturnTypeOrNever < T > = T extends ( ... args : any [ ] ) => any ? ReturnType < T > : never ;