import type {RequireExactlyOne} from 'type-fest';
type Responder = {
text: () => string;
json: () => string;
secure: boolean;
};
const responder: RequireExactlyOne<Responder, 'text' | 'json'> = {
// Adding a `text` key here would cause a compile error.
json: () => '{"message": "ok"}',
secure: true
};
Create a type that requires exactly one of the given keys and disallows more. The remaining keys are kept as is.
Use-cases:
RequireExactlyOne
.The caveat with
RequireExactlyOne
is that TypeScript doesn't always know at compile time every key that will exist at runtime. ThereforeRequireExactlyOne
can't do anything to prevent extra keys it doesn't know about.