私は、シェイプを描き、そのようなイベントをonClick..etcのように処理できるキャンバスがあるとしましょう。 キャンバスで描くことができるすべてのシェイプはDrawableインターフェイスを実装します。変数がインタフェースのすべてのメンバーを持っているかどうかを確認する方法
interface Drawable{
toPath(): Path2D;
}
シェイプがマウスイベントをサポートする場合、それはSupportsEventsインターフェイスを実装します。すべての形状の配列があります
interface SupportsEvents{
on(eventName, callback);
trigger(eventName);
}
:
shapesToDraw: Drawable[] = [];
そのDrawableの[]キャンバスはこの配列からすべての図形を描画しますので。 しかし、ユーザーがキャンバスをクリックすると、ユーザーがクリックした形状が検出され、 'onclick'イベントがトリガーされます。 したがって、配列をフィルタリングし、イベントをサポートするシェイプを残す必要があります(SupportsEventsを実装します)。どうすればいいですか?
shapesToDraw.filter(shape=>shape.hasPoint() && shape implements SupportsEvents)
もちろん、それぞれが'on'in shape && 'trigger' in shape
であるかどうかを確認できますが、より良い方法がありますか?
Typescriptのインターフェイスがコンパイル時に存在することを考慮して、実行時にインターフェイスをチェックする方法がわかりません。メンバーが存在するかどうかを確認することは、より自然なアプローチのように聞こえます。 – tocqueville