@altostra/core
Version:
Core library for shared types and logic
36 lines (35 loc) • 1.35 kB
TypeScript
import type { AnyTypeValidation, TypeValidation } from '@altostra/type-validations';
/**
* An object representing parameterized property
*/
export interface Parameter<T> {
/**
* The parameter name
*/
$param$: string;
/**
* The default value.
*/
defaultValue: T;
/**
* Specify `true` to override the value in the blueprint even if
* the blueprint already has a value
*/
overrideDefault?: true;
}
/**
* Returns a validators that validates if a value is parameter
* @param valueValidator Validator that validates the underlying property type
*/
export declare function parameterOf<T>(valueValidator: AnyTypeValidation<T>): TypeValidation<Parameter<T>>;
export declare const isParameter: TypeValidation<Parameter<unknown>>;
export declare type ParameterizedProp<T> = Parameter<T> | T;
/**
* Returns a validators that validates if a value is parameter
* @param valueValidator Validator that validates the underlying property type
*/
export declare function parameterizedPropOf<T>(valueValidator: AnyTypeValidation<T>): TypeValidation<ParameterizedProp<T>>;
export declare type ParameterizedValue<T> = ParameterizedProp<T> | (T extends object ? Parameterized<T> : ParameterizedProp<T>);
export declare type Parameterized<T extends object> = {
[K in keyof T]: ParameterizedValue<T[K]>;
};