UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Zod】 Zodで 固定文字(定数)を定義したい

Zodを使っていてある固定文字列であること精査したい時にどうするか調べた

具体的にはURLのある階層の接頭辞が「a-」で始まっているかどうかを精査したい

const URI_PREFIX = "a-";

z.literalを使う

zod.dev

使い方

const tuna = z.literal("tuna");
const twelve = z.literal(12);
const twobig = z.literal(2n); // bigint literal
const tru = z.literal(true);

const terrificSymbol = Symbol("terrific");
const terrific = z.literal(terrificSymbol);

// retrieve literal value
tuna.value; // "tuna"

上の例のように Symbol型 に対しても定義できるので、区別したい場合はSymbol型にしておくのが良さそう

const URI_PREFIX = "a-";
const UriPrefix = z.literal(Symbol(URI_PREFIX));

export const validateUri = (uri: string) =>
  UriPrefix.safeParse(uri.slice(0, 2)).success;