Skip to main content
Using Deno in production at your company? Earn free Deno merch.
Give us feedback
Module

x/actionify/src/deps/types.ts>RequireExactlyOne

Create and manage your GitHub workflows with TypeScript and Deno.
Latest
type alias RequireExactlyOne
import { type RequireExactlyOne } from "https://deno.land/x/actionify@0.3.0/src/deps/types.ts";

Create a type that requires exactly one of the given keys and disallows more. The remaining keys are kept as is.

Use-cases:

  • Creating interfaces for components that only need one of the keys to display properly.
  • Declaring generic keys in a single place for a single use-case that gets narrowed down via RequireExactlyOne.

The caveat with RequireExactlyOne is that TypeScript doesn't always know at compile time every key that will exist at runtime. Therefore RequireExactlyOne can't do anything to prevent extra keys it doesn't know about.

Examples

Example 1

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
};

Type Parameters

ObjectType
optional
KeysType extends keyof ObjectType = keyof ObjectType
definition: [Key in KeysType]: (Required<Pick<ObjectType, Key>> & Partial<Record<Exclude<KeysType, Key>, never>>)[KeysType] & Omit<ObjectType, KeysType>