私はサードパーティのライブラリを使用していますが、自分のコントロールを登録しようとしていますが、以前は問題ではなかったパラメータとしてコンストラクタを渡す必要がありましたが、コントロールへの別の依存関係であり、パラメータータイプを満たすためのパラメーターとしてクロージャーを渡す方法がわかりません。コンストラクタパラメータとしてクロージャを渡す方法
登録方法は、シグネチャは次の通りです:
class Registrator {
static Add(controlName: string, component: new (...params: any[]) => Control): void;
}
私は前にコードをfollowinしなければならなかったが、リファクタリングの後、私はそれに依存するいくつかのコードをエクスポートして、私のコントロールをした:
//Old code - working
Registrator.Add("CountdownTimer", Controls.CountdownTimer);
//Trying to add Dependency - can't compile
const countdownTimerFormater = new Objects.Time.TimeFormater();
Registrator.Add("CountdownTimer", (...params: any[]) => return new Controls.CountdownTimer(<HTMLElement>(params[0]), countdownTimerFormater));
コンパイラエラーがあります: '(... params:any [])=> CountdownTimer'型のパラメータは、 'new(params:any [])=> Control'型のパラメータに対してassagnableではありません。タイプ '(... params:any [])=> CountdownTimer'は署名 'new(... params:any []):Control'に一致しません。
Paramsはコントロールのコンテキストに依存しますが、私の場合は常に1の長さになり、コントロールの親としてサーバになるHTMLElement
を渡します。 すべてがjavascriptで機能していることを考慮すると、パラメータを満たすclosureを渡す方法や、私のコードからの依存関係をプルダウンする方法があるように感じます。
コンポーネント:new(... params:any [])=>コントロールをコンポーネント: (... params:any [])=>コントロールに変更しようとしましたか? – cyrix
@cyrix変更できません登録者の署名。追加されていないので追加します私自身。 – CrudaLilium