import { KeyOfAddString, KeyOfAddNumber, KeyOfAddStringOrUndefined, KeyOfAddNumberOrUndefined, KeyOfAddBoolean, KeyOfAddBooleanOrUndefined, KeyOfAddStringArray, KeyOfAddNumberArray, KeyOfAddBooleanArray, KeyOfAddCustomArray, KeyOfAddCustom, KeyOfAddCustomOrUndefined, KeyOfAddCustomArrayOrUndefined, KeyOfAddStringArrayOrUndefined, KeyOfAddNumberArrayOrUndefined, KeyOfAddBooleanArrayOrUndefined, KeyOfAddStringOrNull, KeyOfAddStringOrNullOrUndefined, KeyOfAddNumberOrNull, KeyOfAddNumberOrNullOrUndefined, KeyOfAddBooleanOrNull, KeyOfAddBooleanOrNullOrUndefined, KeyOfAddStringArrayOrNull, KeyOfAddStringArrayOrNullOrUndefined, KeyOfAddNumberArrayOrNull, KeyOfAddNumberArrayOrNullOrUndefined, KeyOfAddBooleanArrayOrNull, KeyOfAddBooleanArrayOrNullOrUndefined, KeyOfAddCustomOrNull, KeyOfAddCustomOrNullOrUndefined, KeyOfAddCustomArrayOrNull, KeyOfAddCustomArrayOrNullOrUndefined } from "./keyTypers"; import { WithoutNull, WithoutUndefined } from "./basicTypers"; import { Caster } from "./caster"; type CasterForArrayOrUndefined = T extends Array ? Caster> : never; type CasterForArrayOrNullOrUndefined = T extends Array ? Caster>> : never; type CasterForArrayOrNull = T extends Array ? Caster> : never; /** * Interface for a finished caster builder. */ interface ICasterBuilderReadyToBuild { build(): Caster; } /** * Type depending on the remaining part: * - We can't build the final object when the remaining part is not empty * - We can build the final object when the remaining part is empty */ type CasterBuilderReturnType = keyof REMAINING extends never ? ICasterBuilderReadyToBuild : ICasterBuilderInProgress; /** * Interface for a caster builder in progress. */ interface ICasterBuilderInProgress { /** * Add string field * * @param key Key of a string typed property */ addString(key: KeyOfAddString): CasterBuilderReturnType>; /** * Add string or undefined field * * @param key Key */ addStringOrUndefined(key: KeyOfAddStringOrUndefined): CasterBuilderReturnType>; /** * Add string or null field * * @param key Key */ addStringOrNull(key: KeyOfAddStringOrNull): CasterBuilderReturnType>; /** * Add string or null or undefined field * * @param key Key */ addStringOrNullOrUndefined(key: KeyOfAddStringOrNullOrUndefined): CasterBuilderReturnType>; /** * Add number field * * @param key Key */ addNumber(key: KeyOfAddNumber): CasterBuilderReturnType>; /** * Add number or undefined field * * @param key Key */ addNumberOrUndefined(key: KeyOfAddNumberOrUndefined): CasterBuilderReturnType>; /** * Add number or null field * * @param key Key */ addNumberOrNull(key: KeyOfAddNumberOrNull): CasterBuilderReturnType>; /** * Add number or null or undefined field * * @param key Key */ addNumberOrNullOrUndefined(key: KeyOfAddNumberOrNullOrUndefined): CasterBuilderReturnType>; /** * Add boolean field * * @param key Key */ addBoolean(key: KeyOfAddBoolean): CasterBuilderReturnType>; /** * Add boolean or undefined field * * @param key Key */ addBooleanOrUndefined(key: KeyOfAddBooleanOrUndefined): CasterBuilderReturnType>; /** * Add boolean or null field * * @param key Key */ addBooleanOrNull(key: KeyOfAddBooleanOrNull): CasterBuilderReturnType>; /** * Add boolean or null or undefined field * * @param key Key */ addBooleanOrNullOrUndefined(key: KeyOfAddBooleanOrNullOrUndefined): CasterBuilderReturnType>; /** * Add custom field * * @param key Key * @param caster Caster */ addCustom(key: KeyOfAddCustom, caster: Caster): CasterBuilderReturnType>; /** * Add custom or undefined field * * @param key Key * @param caster Caster */ addCustomOrUndefined(key: KeyOfAddCustomOrUndefined, caster: Caster>): CasterBuilderReturnType>; /** * Add custom or null field * * @param key Key * @param caster Caster */ addCustomOrNull(key: KeyOfAddCustomOrNull, caster: Caster>): CasterBuilderReturnType>; /** * Add custom or null or undefined field * * @param key Key * @param caster Caster */ addCustomOrNullOrUndefined(key: KeyOfAddCustomOrNullOrUndefined, caster: Caster>>): CasterBuilderReturnType>; /** * Add string array field * * @param key Key */ addStringArray(key: KeyOfAddStringArray): CasterBuilderReturnType>; /** * Add string array or undefined field * * @param key Key */ addStringArrayOrUndefined(key: KeyOfAddStringArrayOrUndefined): CasterBuilderReturnType>; /** * Add string array or null field * * @param key Key */ addStringArrayOrNull(key: KeyOfAddStringArrayOrNull): CasterBuilderReturnType>; /** * Add string array or null or undefined field * * @param key Key */ addStringArrayOrNullOrUndefined(key: KeyOfAddStringArrayOrNullOrUndefined): CasterBuilderReturnType>; /** * Add number array field * * @param key Key */ addNumberArray(key: KeyOfAddNumberArray): CasterBuilderReturnType>; /** * Add number array or undefined field * * @param key Key */ addNumberArrayOrUndefined(key: KeyOfAddNumberArrayOrUndefined): CasterBuilderReturnType>; /** * Add number array or null field * * @param key Key */ addNumberArrayOrNull(key: KeyOfAddNumberArrayOrNull): CasterBuilderReturnType>; /** * Add number array or null or undefined field * * @param key Key */ addNumberArrayOrNullOrUndefined(key: KeyOfAddNumberArrayOrNullOrUndefined): CasterBuilderReturnType>; /** * Add boolean array field * * @param key Key */ addBooleanArray(key: KeyOfAddBooleanArray): CasterBuilderReturnType>; /** * Add boolean array or undefined field * * @param key Key */ addBooleanArrayOrUndefined(key: KeyOfAddBooleanArrayOrUndefined): CasterBuilderReturnType>; /** * Add boolean array or null field * * @param key Key */ addBooleanArrayOrNull(key: KeyOfAddBooleanArrayOrNull): CasterBuilderReturnType>; /** * Add boolean array or null or undefined field * * @param key Key */ addBooleanArrayOrNullOrUndefined(key: KeyOfAddBooleanArrayOrNullOrUndefined): CasterBuilderReturnType>; /** * Add custom field * * @param key Key * @param caster Caster */ addCustomArray(key: KeyOfAddCustomArray, caster: TYPE[KEY] extends Array ? Caster : never): CasterBuilderReturnType>; addCustomArrayOrUndefined(key: KeyOfAddCustomArrayOrUndefined, caster: CasterForArrayOrUndefined): CasterBuilderReturnType>; addCustomArrayOrNull(key: KeyOfAddCustomArrayOrNull, caster: CasterForArrayOrNull): CasterBuilderReturnType>; addCustomArrayOrNullOrUndefined(key: KeyOfAddCustomArrayOrNullOrUndefined, caster: CasterForArrayOrNullOrUndefined): CasterBuilderReturnType>; } /** * Create a new caster builder. * * The default value is `never` just to be sure that there will be a value for the `TYPE`. */ export declare function createCaster(): CasterBuilderReturnType; export {}; //# sourceMappingURL=createCaster.d.ts.map