お知らせ
現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
TSでprocess.exit()
をラップしたカスタムexitを作った時に静的解析のフローが壊れたので、その対策。
因みにこの制御フローのことをControl Flow Analysisと呼ぶらしい。TS系の文書ではCFAと略されていることが多い模様。
通常のprocess.exit()
例の7-8行目のように次の行から先がデッドコードになって欲しいが、上手くいかないので、これを上手くいくようにする。
カスタムexitのコード例 | 通常のprocess.exit()例 |
---|---|
Env | Ver |
---|---|
TypeScript | 4.8.4 |
オブジェクトでラップして、カスタムexit関数の戻り値をnever
で指定してやると上手くいくようになる。
因みにこれTypeScriptの仕様らしく、上手くやる方法はあんまりなさそう。
実はアロー関数ではなくfunction
を使えば解決したりするが、それはなんか嫌なので…
type ErrorPayload = {
message: string;
code: number;
};
type ExampleExit = {
exit: (err: ErrorPayload) => never;
};
const exit = (err: ErrorPayload) => {
process.exit(err.code);
};
export const Example: ExampleExit = { exit };
import { Example } from './example';
Example.exit({ message: 'exit', code: 1 });
console.log(1);