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.

Relaterte artikler