scrapbox-userscript-stdの例外戦略
想定内のエラーかどうかで処理を分ける
想定内のとき
想定外のとき
そもそも起こってはいけないこととして扱う
基本的にlibrary側で例外から回復することはしない
想定内のときに返す型
from 0.3.0
code:ts
type Result<T, E> = { ok: true; value: T } | { ok: false; value: E};
until 0.2.0
code:ts
type Result<T, E> =
(T & { ok: true }) |
(E & { ok: false });
Result型の値resultから正常値を取り出すには、result.okがtrueかどうかで判別する
code:ts
declare 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を投げる