<Base extends ConfigBag<FieldsInput>, const Extra extends FieldsInput>(
base: Base,
extra: Extra
): Omit<Base, keyof ConfigBag<Extra>> & ConfigBag<Extra>Extend a config by cloning the base's fields and adding more — a pure value op, no dependency. Inherited fields keep their env keys, so swapping a shared key updates every extension that points at it.
export const const extend: <
Base extends ConfigBag<FieldsInput>,
Extra extends FieldsInput
>(
base: Base,
extra: Extra
) => Omit<Base, keyof ConfigBag<Extra>> &
ConfigBag<Extra>
Extend a config by cloning the base's fields and adding more — a pure
value op, no dependency. Inherited fields keep their env keys, so swapping a
shared key updates every extension that points at it.
extend = <
function (type parameter) Base in <Base extends ConfigBag<FieldsInput>, const Extra extends FieldsInput>(base: Base, extra: Extra): Omit<Base, keyof ConfigBag<Extra>> & ConfigBag<Extra>Base extends type ConfigBag<F extends FieldsInput> = {
readonly [K in keyof F]: FieldOf<F[K]>
}
A bag of
ConfigField
s produced by
make
/
extend
.
ConfigBag<type FieldsInput = {
readonly [key: string]:
| Config.Config<unknown>
| ConfigField<unknown>
}
FieldsInput>,
const function (type parameter) Extra in <Base extends ConfigBag<FieldsInput>, const Extra extends FieldsInput>(base: Base, extra: Extra): Omit<Base, keyof ConfigBag<Extra>> & ConfigBag<Extra>Extra extends type FieldsInput = {
readonly [key: string]:
| Config.Config<unknown>
| ConfigField<unknown>
}
FieldsInput,
>(
base: Base extends ConfigBag<FieldsInput>base: function (type parameter) Base in <Base extends ConfigBag<FieldsInput>, const Extra extends FieldsInput>(base: Base, extra: Extra): Omit<Base, keyof ConfigBag<Extra>> & ConfigBag<Extra>Base,
extra: const Extra extends FieldsInputextra: function (type parameter) Extra in <Base extends ConfigBag<FieldsInput>, const Extra extends FieldsInput>(base: Base, extra: Extra): Omit<Base, keyof ConfigBag<Extra>> & ConfigBag<Extra>Extra,
): type Omit<T, K extends keyof any> = {
[P in Exclude<keyof T, K>]: T[P]
}
Construct a type with the properties of T except for those in type K.
Omit<function (type parameter) Base in <Base extends ConfigBag<FieldsInput>, const Extra extends FieldsInput>(base: Base, extra: Extra): Omit<Base, keyof ConfigBag<Extra>> & ConfigBag<Extra>Base, keyof type ConfigBag<F extends FieldsInput> = {
readonly [K in keyof F]: FieldOf<F[K]>
}
A bag of
ConfigField
s produced by
make
/
extend
.
ConfigBag<function (type parameter) Extra in <Base extends ConfigBag<FieldsInput>, const Extra extends FieldsInput>(base: Base, extra: Extra): Omit<Base, keyof ConfigBag<Extra>> & ConfigBag<Extra>Extra>> & type ConfigBag<F extends FieldsInput> = {
readonly [K in keyof F]: FieldOf<F[K]>
}
A bag of
ConfigField
s produced by
make
/
extend
.
ConfigBag<function (type parameter) Extra in <Base extends ConfigBag<FieldsInput>, const Extra extends FieldsInput>(base: Base, extra: Extra): Omit<Base, keyof ConfigBag<Extra>> & ConfigBag<Extra>Extra> => ({
...base: Base extends ConfigBag<FieldsInput>base,
...function make<Extra>(fields: Extra): ConfigBag<Extra> (+1 overload)Group fields into a bag with per-field accessors (cfg.apiKey.set(...)). Each
value is a plain Config (→ read-only field) or an already-built field from
swappable
/ another bag. Pass an
AllConfig
to convert it back.
make(extra: const Extra extends FieldsInputextra),
});