misskey
misskey copied to clipboard
DeepClone関数が T extends IActivity なオブジェクトに対応していない
Summary
上記を見る限り、現状deliverToRelays で T extends IActivity型のオブジェクトをディープクローンする為にdeepClone関数を使用していますが、現状のdeepClone関数の型定義CloneableはIActivityの全てのプロパティと互換性がないためそのままでは引数として渡せないので、activity を any として渡しているため型安全性に課題があります。
具体的には継承元の startTime などを始めとする Date を使用しているプロパティなどが互換性がなさそうです。
調査に多くの時間が取れておらず恐縮ですが、ぱっと考えられる対策としては以下の2つが考えられると思います:
Cloneable型の定義を拡張し、T extends IActivityな型と互換性があるようにする。
- ただし、
Data型のCloneをそのまま行っても問題がありそうなため、場合によっては複雑度が増しそう。
IActivity専用のディープクローン関数を作成する。deliverToRelays内部でIActivityのプロパティをClonableにCastするような処理を行う
- exp: たとえば、DateオブジェクトをISO文字列に変換するなど
- structuredCloneに置き換える
- 一番早そう