created: 2024-04-22T09:25:23.454Z
type-fest の RequireAllOrNone
型ユーティリティライブラリの type-fest
の RequireAllOrNone
の使い方。
RequireAllOrNone
この実装だとresponder3
だけ型エラーになる。
import type { RequireAllOrNone } from "type-fest";
type Responder = {
text?: () => string;
json?: () => string;
secure: boolean;
};
// text,json どちらも持たないのでOK
const responder1: RequireAllOrNone<Responder, "text" | "json"> = {
secure: true,
};
// text,json どちらも持ってるのでOK
const responder2: RequireAllOrNone<Responder, "text" | "json"> = {
text: () => '{"message": "hi"}',
json: () => '{"message": "ok"}',
secure: true,
};
// text,json 片方だけもってるのでNG
const responder3: RequireAllOrNone<Responder, "text" | "json"> = {
json: () => '{"message": "ok"}',
secure: true,
};
エラーメッセージ
Type '{ json: () => string; secure: true; }' is not assignable to type 'RequireAllOrNone<Responder, "text" | "json">'.
Type '{ json: () => string; secure: true; }' is not assignable to type 'Required<Pick<Responder, "text" | "json">> & Omit<Responder, "text" | "json">'.
Property 'text' is missing in type '{ json: () => string; secure: true; }' but required in type 'Required<Pick<Responder, "text" | "json">>'
仲間
RequireAllOrNone
には仲間がいる。
- type-fest/source/require-at-least-one.d.ts at main · sindresorhus/type-fest
- type-fest/source/require-exactly-one.d.ts at main · sindresorhus/type-fest
その他
type-fest
のドキュメント、弾いてくれる例も書いたらいいのにな、と思う。