やっと型パズルを解きました。
前回の最後で、こんな場合にエラーになると書きました。
// nullableになる例 import vs from "value-schema"; // import vs from "https://deno.land/x/value_schema@v3.0.0-rc.8/mod.ts"; // Denoで動かす場合はこちら const schemaObject = { id: vs.number({ifUndefined: null}), // 省略時はnull name: vs.string(), }; const user = vs.applySchemaObject(schemaObject, { name: "John Doe", }); // user.idはnullだけど、TypeScriptにはnumberとして認識されている // console.log(typeof user.id, user.id.toFixed()); // 型チェックは通るけど実行時エラー console.log(typeof user.id, user.id); console.log(typeof user.name, user.name.toUpperCase());
今回の変更で、この場合の
user.id
はnumber | null
として認識されるようになり、上のコードはコンパイルの段階でエラーが発生するようになりました。もっと正確に書くと、
ifEmptyString
/ ifNull
/ ifUndefined
のどれかがnull
なら戻り値の型がnullableになります。型パズルは試行錯誤の結果、関数のオーバーロードで解決しました。本当はもっとスマートにやりたかったんですけどね。
もうそろそろ正式なバージョン3をリリースしたいなぁ。
0 件のコメント:
コメントを投稿