我有如下代碼
class Eventful<T extends string> {
// ↓ How can I initialized this attr without ts error?
private eventMap: Record<T, (args?: any) => void> = ?
}
或者
class Eventful<T extends string> {
private eventMap!: Record<T, (args?: any) => void>
constructor() {
this.eventMap = ?
}
}
那么,我該怎么辦?謝謝。
我嘗試用初始化屬性
function addEvent(key: T, handler: (args?: any) => void>) {
this.eventMap = {
[key]: [] as EventHandler[]
}
}
但它也會導致 VSCode 中的 ts(2322) 出錯。
uj5u.com熱心網友回復:
我認為您應該使用宣告as
來防止重復型別:
class Eventful<T extends string> {
private eventMap = {} as Record<T, ((args?: any) => void)[]>;
}
此外,它應該是字串到函式陣列的記錄。然后您可以使用push
在以下位置添加處理程式addEvent
:
addEvent(key: T, handler: (args?: any) => void) {
if (!(key in this.eventMap)) this.eventMap[key] = [];
this.eventMap[key].push(handler);
}
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/522247.html
標籤:打字稿