我正在使用第三方庫並試圖註冊自己的控件,不幸的是它需要我將構造函數作爲參數傳遞,而之前沒有問題,但現在我試圖添加對控件的另一個依賴關係,不知道如何傳遞閉包作爲參數來滿足參數類型。如何將閉包作爲構造函數參數
登記方法有以下特徵:
class Registrator {
static Add(controlName: string, component: new (...params: any[]) => Control): void;
}
我之前跟隨着代碼,但重構後我出口一些代碼,使我的控制依賴於它:
//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'類型的參數。 類型'(... params:any [])=> CountdownTimer'不提供符合'new'(... params:any []):Control''的匹配。
參數取決於控件的上下文,在我的情況下它總是長度爲1,並且通過HTMLElement
,它應該作爲控件的父級服務器。 考慮到JavaScript中的所有東西都是函數,我覺得應該有一種方法來傳遞閉包,以滿足參數或者將我的依賴從我的代碼推送到params。
您是否嘗試將'component:new(... params:any [])=> Control'更改爲'component: (... params:any [])=> Control' – cyrix
@cyrix無法更改註冊人。添加的簽名,因爲它不是 我自己的。 – CrudaLilium