textalive-app-api icon indicating copy to clipboard operation
textalive-app-api copied to clipboard

Word や Phrase の型宣言が export されていないため、型指定ができない

Open cyross opened this issue 10 months ago • 2 comments

初めて質問を投げます。 サンプルのコードをTypescriptで書こうとしたとき、WordPhraseVideo などの重要なクラスの宣言が export されないため、const 宣言などで型を宣言できません。

これらのクラスを export できないかどうか、ご検討をよろしくお願いいたします。

また、型宣言ファイルを調べていたのですが、ITemplateInterpreter インターフェースの定義が見つかりませんでした。 これはどこで定義されているのでしょうか?

cyross avatar Apr 07 '24 08:04 cyross

@cyross TextAlive App APIのご利用ありがとうございます。言及いただいたクラスはご自身でインスタンス化することを想定しておらず、型宣言も公開していません。

その代わりに、

のようにインタフェースとして公開されている型情報をご利用いただき、コード補完などでご活用いただければ幸いです。

ITemplateInterpreter インターフェースへの参照に関しては、リリックアプリ開発では利用しない機能がこちらの手違いで型定義ファイル内に露出していたものと思われます。

arcatdmz avatar Apr 09 '24 04:04 arcatdmz

@arcatdmz ご回答ありがとうございます。 サンプルにあるコードを Typescript で実装しようとすると、IWordインタフェースには animate プロパティが存在せず、 ESLint で蹴られます。

function onVideoReady(v) {
  // メタデータを表示する
  // Show meta data
  artistSpan.textContent = player.data.song.artist.name;
  songSpan.textContent = player.data.song.name;

  // 定期的に呼ばれる各単語の "animate" 関数をセットする
  // Set "animate" function
  let w = player.video.firstWord;
  while (w) {
    w.animate = animateWord;
    w = w.next;
  }
}

(w as any).animate や、interface IWord2 extends IWord { ... } という逃げ道はありますが、公式非公開のプロパティをそのまま使っていいのか気がかりです。

cyross avatar Apr 10 '24 14:04 cyross

@cyross お返事遅くなりすみません。こちら、型定義を調整しました。 IWord.animate などをご参照ください。フレーズ、単語、文字いずれの場合も (now: number, u: IRenderingUnit) => void という型の関数animate に代入できるようにしました。

ただ、演出の時間精度を重視する場合は、 animate プロパティでなく、 player.timer.position を参照しながら player.findBeat や、今回新しく実装された player.findBeatChange などをご利用いただいて画面を適宜再描画していただくことをお薦めします。

後者の活用例は以下のコードなどをご参照ください。

https://github.com/TextAliveJp/textalive-app-lyric-sheet/blob/ff4918ed88a15a571739d4e5e452a0ff80c63c73/script.js#L121-L138

arcatdmz avatar May 12 '24 02:05 arcatdmz

@arcatdmz チェックしてみて、コードが問題なく動いているようです。 ありがとうございます。

cyross avatar May 13 '24 15:05 cyross