misskey icon indicating copy to clipboard operation
misskey copied to clipboard

DeepClone関数が T extends IActivity なオブジェクトに対応していない

Open Umisyo opened this issue 2 years ago • 0 comments

Summary

上記を見る限り、現状deliverToRelaysT extends IActivity型のオブジェクトをディープクローンする為にdeepClone関数を使用していますが、現状のdeepClone関数の型定義CloneableIActivityの全てのプロパティと互換性がないためそのままでは引数として渡せないので、activityany として渡しているため型安全性に課題があります。

具体的には継承元の startTime などを始めとする Date を使用しているプロパティなどが互換性がなさそうです。

調査に多くの時間が取れておらず恐縮ですが、ぱっと考えられる対策としては以下の2つが考えられると思います:

  1. Cloneable型の定義を拡張し、T extends IActivityな型と互換性があるようにする。
  • ただし、Data 型のCloneをそのまま行っても問題がありそうなため、場合によっては複雑度が増しそう。
  1. IActivity専用のディープクローン関数を作成する。
  2. deliverToRelays 内部で IActivityのプロパティを Clonable にCastするような処理を行う
  • exp: たとえば、DateオブジェクトをISO文字列に変換するなど
  1. structuredCloneに置き換える
  • 一番早そう

Umisyo avatar Jul 04 '23 09:07 Umisyo