Typescriptの型指定を無視する


gl-react でお絵描き的なことをしようとしてて、Typescript の型チェックが通らない値を設定する必要が出来た。

型設定を修正するのが正攻法ですが、直すのが面倒な事情もあっていくつかのプロパティーの型チェックを放棄したい。

考えてみれば必要な機能で基本的な事なんですが、やろうと思ったことがなかったので知らなかった。

きっかけ

<Node>clear プロパティに null を設定する必要がある。

ただドキュメントには option 引数となってるし定義も以下のようになっている。

 

これだと長さが4の数値配列か undefined しか設定できない。

テストコードと解決方法

問題を簡潔化するためにこんなコードを用意します。

prop1 は文字列が必要ですし、prop2 は指定なしか配列が必要です。

 

この制約を破るには any 型として宣言することで、型チェックを免除させます。

 

スプレット演算子を使って any 型オブジェクトを渡せば、プロパティを省略しようが増やそうがもうなんでもいけます。

ただし{prop1.toString()} で実行エラー 'toString' of undefined が起きます。

 

なんでもできるということは Typescript の利点を投げ捨てるということなので、型の修正が困難で、安全かつ他に影響が出ない場合のみにしましょう。

中間コンポーネントを用意するとコントロールしやすいです。

 

きっかけとなった <Node> もこんな感じで rest をそのまま詰め込んでます。


コメントを残す

メールアドレスが公開されることはありません。