typescript - Cum să definești tipul de returnare al unei funcții pentru un obiect literal personalizat


Iată obiectul, care este returnat de o metodă într-o clasă:

public dbParameters() // HERE
{
    return {
        "values": this.valuesForDb,
        "keys": this.keysForDb,
        "numbers": this.numberOfValues,
    }
}

Ați putea să-mi spuneți, vă rog, cum să definesc tipul de return al funcției, în acest caz? Sau poate că aceasta nu este metoda corectă și ar trebui să folosesc un alt tip în loc de literalul obiect?

Răspuns #1

O modalitate ar putea fi doar un mesaj, acel rezultat este un dicționar:

public dbParameters() : { [key: string]: any}
{
    return {
        "values": this.valuesForDb,
        "keys": this.keysForDb,
        "numbers": this.numberOfValues,
    }
}

Celălalt ar putea folosi puțină interfață

export interface IResult {
    values: any[];
    keys: string[];
    numbers: number[];
}


export class MyClass
{
    public dbParameters() : IResult
    {
        return {
            values: this.valuesForDb,
            keys: this.keysForDb,
            numbers: this.numberOfValues,
        }
    }
}

Cu interface avem un mare avantaj... poate fi reutilizat în multe locuri (declarație, utilizare...), deci acesta ar fi preferatul

Și, de asemenea, putem compune cea mai specifică setare a rezultatului proprietăților

export interface IValue {
   name: string;
   value: number;
}
export interface IResult {
    values: IValue[];
    keys: string[];
    numbers: number[];
}

Joacă-te cu asta aici