type ValueOf = D[keyof D]; type Unpacked = D extends any[] | readonly any[] ? D[number] : D; type Nullable = D | null; type LooseObject = { [key: string]: any; }; type StrictObject = { [key: string]: T; }; type Pair = { key: string; value: T; }; type EntityStruct = { keyName: keyof T; ids: (string | null)[]; entities: { [id: string]: T; }; }; interface DataWrapper { data: T; } interface AsyncDataWrapper { data: T[]; total: number; } type PromiseType = T extends Promise ? D : never; type Override = T & Omit; type Comparer = (lhs: T, rhs: T) => boolean; type OptionalRecord = { [P in T]?: D }; interface IdState { [key: number]: Readonly; }