knockout.js - 在 Typescript 中擴展通用參數
我想創建一個工具函數,通過向數組中的每個項目添加一個 isChecked 的 Knockout 可觀察屬性來生成檢查清單。這個函數應該是這樣的:
createCheckList<T>(allEntities: T[], selected: T[]) : CheckListItem<T> {
...
}
我正在返回一個 CheckListItem<T>,因為這個介面應該擴展 T 以添加 isChecked 屬性。然而,TypeScript 不允許我這麼做:
interface CheckListItem<T> extends T {
isChecked: KnockoutObservable<boolean>;
}
給我錯誤訊息:
一個介面只能擴展另一個類別或介面。
有辦法做到這個嗎?
答案#1
自從 TypeScript 1.6 以來,你可以使用交叉類型:
type CheckListItem<T> = T & {
isChecked: KnockoutObservable<boolean>;
};
答案#2
在 TypeScript 中沒有方法可以表達這個。
你當然可以改成這樣做:
interface CheckListItem<T> {
isChecked: KnockoutObservable<boolean>;
item: T;
}
這樣做的優點是當物件本身具有 isChecked 屬性時,不會破壞該物件。
