javascript - Riktig annotasjon for Array av objekter i KnockoutJS ved bruk av TypeScript
Siden DefiantelyTyped-typene ble oppdatert til å bruke TypeScript med generics, hva ville være riktig type i definisjonen (siden nå bare ObservableArray av T er nødvendig):
class Some {
name: KnockoutObservable<string> = ko.observable("Some name"),
arrayOfValues: KnockoutObservableArray< (of Object??? ) > ???? ;
constructor () {
arrayOfValues.push( {key: "value"} );
...
Svar #1
Du kan bruke TypeScripts typeinferen for dette, ellers vil du ende opp med en lang kodelinje som gjentar seg ganske mye:
var examples = ko.observableArray<Example>();
examples.push(new Example('Test'));
examples.push('Type warning'); // not an 'Example'
I dette eksemplet sender du typeargumentet når du oppretter ko.observableArray. TypeScript slutter seg til at var examples er av typen KnockoutObservableArray<Example> og sjekker alle dine kall.
For å sette det i kontekst, her er koden med ditt eksempel:
interface YourType {
key: string;
}
class Some {
name = ko.observable<string>("Some name");
arrayOfValues = ko.observableArray<YourType>();
constructor () {
this.arrayOfValues.push( {key: "value"} );
...
Svar #2
KnockoutObservableArray<any>
eller definer et grensesnitt for typen din.
