import {Except} from './except';
/**
Create a type that requires at least one of the given keys. The remaining keys are kept as is.
@example
```
import {RequireAtLeastOne} from 'type-fest';
type Responder = {
text?: () => string;
json?: () => string;
secure?: boolean;
};
const responder: RequireAtLeastOne = {
json: () => '{"message": "ok"}',
secure: true
};
```
*/
export type RequireAtLeastOne =
{
// For each Key in KeysType make a mapped type
[Key in KeysType]: (
// …by picking that Key's type and making it required
Required>
)
}[KeysType]
// …then, make intersection types by adding the remaining keys to each mapped type.
& Except;