Skip to content
Go back

Astroテーマを自分用に修正するときのメモ・7

· Updated:

先日の続き。

  • vitest.config.tsincludeに値をセットしないと、vscodeのテストエクスプローラーに表示されないみたい
    • その前はビルドしないと表示されなかったので、ひと手間かかっていた
    • これをすればソースコードをビルドしなくても直接実行してくれるようになった
  • interfaceは定義が前後してもきちんと見つけてくれる
    • 宣言をマージする仕様の都合で完全な型を作ってから型チェックが走るためらしい
  • optionalを強制unwrapするには!演算子(non-null assertion)が使える
    • ・・・が、型安全性を自ら捨てることになるので使わないほうが良い
    • これを知らないときはasで型を非nullに変えていたけど、これなら型を明示しなくて良くなる
    • それよりも、ちゃんと、型ガード関数を作って安全に処理したほうが良い
      • 配列は可変長タプルにすることで、その要素を非nullで取り出すことができる
  • newはthisオブジェクトを作って関数を呼び出すための演算子
    • x = new Foo(...);は実質的にthis = {...}; Foo(this, ...); x = this;のようなものだそう
      • 加えて、thisのプロトタイプ周りもそれ用に初期化される
      • プロトタイプはC++でいうvtableのような領域共有の仕組みらしい
    • TypeScriptでは、new呼出できる関数はnew (args: Args) => R型で表現できる
  • メソッドは関数型のプロパティとほぼ同じだが、 双変性bivariance を持つという不思議な仕様がある
    • 要約すると、サブセットでもスーパーセットでも構わず代入できてしまうので型として安全でないが、既存の実装を壊さないために必要になっている、らしい
    • 関数なら、コンパイルオプションstrictFunctionTypesを使えば、より厳しい型検査が行われるので、通常はこちらを使うと良い
    • メソッドはthisを取れたりするので、使いたいケースもちゃんとあるはず

参考資料#