generated at
scrapbox-userscript-stdの例外戦略
想定内のエラーかどうかで処理を分ける
想定内のとき
Result (Rust)と同様の型を返す
Error (JavaScript)は使わない
想定外のとき
そもそも起こってはいけないこととして扱う
基本的にlibrary側で例外から回復することはしない

想定内のときに返す型
from 0.3.0
ts
type Result<T, E> = { ok: true; value: T } | { ok: false; value: E};
until 0.2.0
ts
type Result<T, E> = (T & { ok: true }) | (E & { ok: false });
Result 型の値 result から正常値を取り出すには、 result.ok true かどうかで判別する
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 と融合させたのはいい設計じゃなかったかも
当処はScrapbox REST APIでの使用しか想定していなかった
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 を投げる

2024-07-21 20:23:14 TypeError も含めて全てoption-tResult<T, E>で返す設計に変えようと思う

#2024-07-21 20:23:11
#2022-02-10 05:21:24