👷
zod.coerce.numberの挙動について調査してみた
zod.coerceで何が行われているのかわからず怖かったので動作確認してみた。
コード
const n = z.coerce.number()
const result = n.safeParse(v) // vにいろいろ入れて動作確認
console.log({
v,
success: result.success,
data: result.success ? result.data : '',
})
結果
v | success | data |
---|---|---|
undefined | false | |
null | true | 0 |
true | true | 1 |
false | true | 0 |
NaN | false | |
Infinity | true | Infinity |
-Infinity | true | -Infinity |
0xfa | true | 250 |
1 | true | 1 |
'' | true | 0 |
'true' | false | |
'false' | false | |
'Infinity' | true | Infinity |
'-Infinity' | true | -Infinity |
'0xfa' | true | 250 |
'-1' | true | -1 |
'0' | true | 0 |
'1' | true | 1 |
'1.1' | true | 1.1 |
'1' | false | |
{} | false | |
[] | true | 0 |
[true] | false | |
[false] | false | |
[1] | true | 1 |
['1'] | true | 1 |
['1', '2'] | false |
まとめ
怖い
Discussion
要は
isNaN(Number(v))
以上のことはやってないっぽい