javascript - Lag en kjede av metoder med TypeScript


Jeg har et array av land definert som en const CountriesList:

[{
    name: "Afghanistan",
    id: "4",
    alpha2Code: "AF",
    alpha3Code: "AFG",
    numericCode: 4
},
...]

Jeg har en statisk klasse Countries som skal returnere land med forskjellige formater og filtrerte land fra konventet ovenfor.

export class Countries {
public static getCountries() {
    return CountriesList;
}

public static getFilteredCountries(setName: string) {
    return CountriesList
        .filter(function (country, index) {
            return customFilter(setName, country, index)
        });
}

public static formatForSelectInput(items: ICountryIso3166[]) {
    return items.map(function (country) {
        return {
            title: L(country.name),
            data: country.id,
            value: country.name
        };
    })
}
}

Nå, siden det er TypeScript og har sine egne regler, har jeg ingen anelse om hvordan jeg skal kjede metoder for å få det til å fungere slik:

var countryItems = Countries
    .getFilteredCountries('test')
    .formatForSelectInput();

Bør jeg lage et nytt objekt, slik at jeg ikke returnerer et rent array, men et array inne i et wrapper-objekt med respektive metoder, eller hvordan utfører jeg kjedingen riktig?

Vennligst gi råd.

Svar #1

Du vil kjede metoder, så du vil kalle dem på et objekt, ikke en statisk klasse. Så noe som å fjerne statisk fra Countries og endre koden din til

var countryItems = new Countries()
    .getFilteredCountries('test')
    .formatForSelectInput();

Hver metode der du ønsker å tillate kjeding bør da avsluttes med return this;. Du bør også erklære returtypene til metodene dine (til å være klassen Countries).

Relaterte artikler