2020年6月28日日曜日

value-schema v3.0.0-rc.9を公開しました

また中途半端なリリース報告です。

やっと型パズルを解きました。

解いたパズル

前回の最後で、こんな場合にエラーになると書きました。
// 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.idnumber | nullとして認識されるようになり、上のコードはコンパイルの段階でエラーが発生するようになりました。
もっと正確に書くと、ifEmptyString / ifNull / ifUndefinedのどれかがnullなら戻り値の型がnullableになります。

型パズルは試行錯誤の結果、関数のオーバーロードで解決しました。本当はもっとスマートにやりたかったんですけどね。

もうそろそろ正式なバージョン3をリリースしたいなぁ。

0 件のコメント:

コメントを投稿