Zodで オブジェクトのKeyをある型の変数として扱いたい
結論、その場合はz.record
を使う
zod.dev
キーの型を気にせずオブジェクトの値だけを検証するだけなら以下で良い
const NumberCache = z.record(z.number()); type NumberCache = z.infer<typeof NumberCache>;
キーと値の両方を検証したい場合は、 z.record(keyType, valueType)
を使用する
const NoEmptyKeysSchema = z.record(z.string().min(1), z.number()); NoEmptyKeysSchema.parse({ count: 1 }); // => { 'count': 1 } NoEmptyKeysSchema.parse({ "": 1 }); // fails
注意点
JavaScript は内部ですべてのオブジェクト キーを文字列に自動的にキャストするので、キーを数字にした時に文字列になっていることに注意する
const testMap: { [k: number]: string } = { 1: "one", }; for (const key in testMap) { console.log(`${key}: ${typeof key}`); } // prints: `1: string`