scrapbox-userscript-stdの例外戦略
想定内のエラーかどうかで処理を分ける
想定内のとき
想定外のとき
そもそも起こってはいけないこととして扱う
基本的にlibrary側で例外から回復することはしない
想定内のときに返す型
from 0.3.0
tstype Result<T, E> = { ok: true; value: T } | { ok: false; value: E};
until 0.2.0
tstype Result<T, E> =
(T & { ok: true }) |
(E & { ok: false });
Result
型の値 result
から正常値を取り出すには、 result.ok
が true
かどうかで判別する
tsdeclare function getData(): Result<
{ title: string; lines: string[]; },
{ name: string; message: string; }
>;
const result = getData();
if (result.ok) {
const { title, lines } = result;
//...
} else {
console.error(`${result.name} ${result.message}`);
}
正常値及び異常値objectをばらして ok
と融合させたのはいい設計じゃなかったかも
JSON responseに ok
を含むAPIが存在しない
どれもpremitive型ではなく単純なJSONしか返さない
しかし以下の限界がある
いちいち const { title, lines } = result;
と分解してparametersを取り出さなくてはならないのが面倒
ok
を返すREST APIが実装されたら破綻する
REST API以外の関数に応用できない
素直に { ok: true; value: T } | { ok: false; value: E}
とするべきだろうな
変えた
想定外のときに投げる型
UnexpectedResponseError
を投げる