👌

Template Literal Typesを知らんかったし、zodで表現する方法もあったらしい

2025/01/20に公開

文字列の型定義に部分的な制約を定義したかったけどやり方知らなんだが、あった

Template Literal Typesで

type Food = "Egg" | "Apple" | "Meat";
type Category = `group_${Food}`;
// "group_Egg" | "group_Apple" | "group_Meat"

とか

type Category = `group_${string}`;
// "group_Music" | "group_Book" | "group_foo"

みたいに書ける

https://zenn.dev/ak/articles/3e1a9b012b3c84

zodで表現どうするんやろ?と思ったけど、現状はcustom API で書き換える方法があるぽい

https://github.com/colinhacks/zod/issues/419

group: z.custom<`group_${string}`>((val) => /^group_/.test(val))
// z.infer<typeof して
// group: `group_${string}`

便利ですなあ

Discussion