やっと型パズルを解きました。
前回の最後で、こんな場合にエラーになると書きました。
// 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 件のコメント:
コメントを投稿