0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DartでJavaScriptライブラリをもっと手軽に扱いたい

Last updated at Posted at 2025-01-19

概要

DartからJavaScriptのライブラリにアクセスするためには基本的にDart専用の型定義のようなものを書くのが原則なんですが、TypeScriptの.d.tsと違い、誰も使ってないので全く揃っていない。

間の悪いことにGoogleはDart3.3からこの型定義の仕様を大幅に変えてしまったので、.d.tsからの変換ツールも軒並み更新を余儀なくされたもののどれも更新・対応する気配がまるで見えないという状況。

とりあえず

型厳密にしたい気持ちはわかるんですが、このままではずっと机上の空論のままなので、型厳密のことはとりあえず忘れて普通にJavaScriptのようにとりあえず存在すればglobalThisから.で繋いだらメンバにアクセスできるような感じでJavaScriptライブラリを使いたい。

解決策

Dartのすべての基本クラスであるObjectにはnoSuchMethodというメンバが登録されており、これをオーバーライドすると(dynamic型経由で)存在しないメンバにアクセスしようとしたときに独自の処理ができるようになっているらしい。

意図的にどんなメンバにアクセスしようとしたかを単純に取得はできなくなってるっぽいが、今のところは特定の前後の文字列を削除するだけで対応できるみたい。

一応、dart/jsにはJavaScriptオブジェクトに対して文字列で名前を指定して関数やコンストラクタを呼び出したり
プロパティを取得したりする関数はあるのでそれをnoSuchMethodから呼び出すことでそれっぽいことができるんじゃないかと。

成果物

いろいろ機能を付け足したら思った以上に複雑になった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?