Open3
プチソースレビュー:微妙に簡単な値の変換はZodのスキーマでやろう
Before
こういう関数のソースレビューをしました
const parseSearchParameter = (searchParameters: string[] | undefined): string | undefined => {
if (!searchParameters || searchParameters.length !== 1) {
return undefined;
}
const [value] = searchParameters;
// 'hoge' or 'fuga' ならそれを返す、その他は undefined
return value === 'hoge' || value === 'fuga' ? value : undefined;
};
これは、フロントエンドとバックエンドで受け取る値の型変換の都合で、配列を単一の値に変換する必要が生じたときの関数です。
要は、['hoge']か、['fuga']しかうけつけず、[]や、['hoge', 'fuga]はundefinedとみなすみたいな変換処理です。
After
hogeとfugaのいずれかが1つだけ含まれる場合のみValidとみなすSchemaを定義して、safeParseします。
const searchParameterSchema = z.array(z.union([z.literal('hoge'), z.literal('fuga')])).length(1);
const parseResult = desiredTeachingPeriodSchema.safeParse(searchParameters);
const parsedSearchParameter = parseResult.success ? parseResult.data[0] : undefined
Pros
- 手続き的な処理を読まなくても宣言的にどういう値がいいかわかる
- そもそもやろうとしていることに対してコードの行数が多すぎたので、スリムになってGood
Cons
- safeParse後の値の型について知っておくほうが驚きが小さくなる
- safeParse自体がそもそもdata相当のものを返してくれる方がいい or 要素1つ目を返すところまでSchemaで定義できたほうが読みやすい ※Zod力もっと高めれば書けるかもだけどコスパが合わないかな
- ZodのSchemaは普通rhfで使うのでちょっと驚きがある
ログインするとコメントできます