textalive-app-api
textalive-app-api copied to clipboard
Word や Phrase の型宣言が export されていないため、型指定ができない
初めて質問を投げます。
サンプルのコードをTypescriptで書こうとしたとき、Word
や Phrase
、Video
などの重要なクラスの宣言が export
されないため、const
宣言などで型を宣言できません。
これらのクラスを export
できないかどうか、ご検討をよろしくお願いいたします。
また、型宣言ファイルを調べていたのですが、ITemplateInterpreter
インターフェースの定義が見つかりませんでした。
これはどこで定義されているのでしょうか?
@cyross TextAlive App APIのご利用ありがとうございます。言及いただいたクラスはご自身でインスタンス化することを想定しておらず、型宣言も公開していません。
その代わりに、
のようにインタフェースとして公開されている型情報をご利用いただき、コード補完などでご活用いただければ幸いです。
ITemplateInterpreter インターフェースへの参照に関しては、リリックアプリ開発では利用しない機能がこちらの手違いで型定義ファイル内に露出していたものと思われます。
@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 お返事遅くなりすみません。こちら、型定義を調整しました。 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 チェックしてみて、コードが問題なく動いているようです。 ありがとうございます。