TypeScriptでPromiseの返り値の型をNonNullableにする

表題の欲求が発生して、ハマったので色々調べていた結果のメモ。

こういう感じだった。

gist.github.com

ようは、Utility型を使ってPromiseの返り値をゲットしてNonNullableにしてPromiseに戻す というそれだけのはなし。ConditionalTypeの解説はここではしない。

Utility型のライブラリはいくつかあるけど以下2つが有名で、どっちも使いやすいし今回の目的に沿ったUtil型はどっちのライブラリにもある。

わかれば、そうだねってなるけど書いておかないと忘れそうなので書いた。

VSCodeでonSaveしたときeslintとprettierの挙動がおかしいし重すぎるし死ぬかと思った

誇張タイトル。

そしてめっちゃくだらない内容です。

VSCodeのeslintエクステンションがv2へバージョンアップしてから "editor.codeActionsOnSave" を推奨するようになったので、その設定を適用していた。

まあ詳しくはこのQiitaの記事が詳しい。

qiita.com

それで、設定から`"editor.formatOnSave"を消したつもりだったのだけど消せていなかったらしく

{
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
  }
}

みたいに2つとも書かれている状態になっていた。

このせいで保存するたびに自動でまずprettierがかかってからeslintがかかるのだけど、eslintのfixルールの適用がおかしいしPrettierのformatはなんかぶっ壊れた状態になるし、なんか保存に5秒くらいかかるし地獄みたいな状態だった。

{
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
  }
}

従来の"editor.formatOnSave": true,を消して事なきを得た。


それにしても設定を変えたのは3月のv2になってすぐだったはずで、最近じゃないのに急に起こるようになって怪奇現象すぎる。なんなのか。