declare const __nominal_name: unique symbol; declare const __nominal_type: unique symbol; // eslint-disable-next-line @typescript-eslint/consistent-type-definitions type __Type = { [__nominal_name]: TName; [__nominal_type]: T; }; export type Nominal = T & __Type; export type Denominalize = T extends __Type ? TDenominalized : T; export type DenominalizeDeep = T extends __Type ? TDenominalized : {[TKey in keyof T]: DenominalizeDeep}; export class EmptyObjectPatch { protected _?: unknown; }