Ik maakte dit kleine interface om statische types te krijgen voor Knockout:
interface ObservableNumber {
(newValue: number): void;
(): number;
subscribe: (callback: (newValue: number) => void) => void;
}
interface ObservableString {
(newValue: string): void;
(): string;
subscribe: (callback: (newValue: string) => void) => void;
}
interface ObservableBool {
(newValue: bool): void;
(): bool;
subscribe: (callback: (newValue: bool) => void) => void;
}
interface ObservableAny {
(newValue: any): void;
(): any;
subscribe: (callback: (newValue: any) => void) => void;
}
interface ObservableStringArray {
(newValue: string[]): void;
(): string[];
remove: (value: String) => void;
removeAll: () => void;
push: (value: string) => void;
indexOf: (value: string) => number;
}
interface ObservableAnyArray {
(newValue: any[]): void;
(): any[];
remove: (value: any) => void;
removeAll: () => void;
push: (value: any) => void;
}
interface Computed {
(): any;
}
interface Knockout {
observable: {
(value: number): ObservableNumber;
(value: string): ObservableString;
(value: bool): ObservableBool;
(value: any): ObservableAny;
};
observableArray: {
(value: string[]): ObservableStringArray;
(value: any[]): ObservableAnyArray;
};
computed: {
(func: () => any): Computed;
};
}
Zet het in "Knockout.d.ts" en verwijzen het dan uit uw eigen bestanden. Zoals u kunt zien, het zou veel baat hebben bij generieke geneesmiddelen (die komen volgens de specs).
Ik heb enkele interfaces voor ko.observable (), maar ko.computed () en ko.observableArray () gemakkelijk worden toegevoegd in hetzelfde patroon. Update: Ik bevestigde de handtekeningen voor een abonnement () en toegevoegd voorbeelden van computertomografie () en observableArray ().
Om gebruik te maken van uw eigen bestand, voeg dit toe aan de top:
/// <reference path="./Knockout.d.ts" />
declare var ko: Knockout;