156 votes

TypeScript type de retour de fonction basé sur le paramètre d’entrée

J’ai quelques interfaces et objets différents qui ont chacun une propriété. Disons que ce sont des objets stockés dans un db NoSQL. Comment puis-je créer une fonction générique avec un type de retour déterministe basé sur son paramètre d’entrée `` ?

Le « rayon » de propriété n’existe pas sur le type « Cercle | Square'

256voto

Arash Points 73

`` à la rescousse :

Merci À Silvio de m’avoir pointé dans la bonne direction.

-9voto

er_vaibhs Points 11
As you have mentioned that data is comming from No-Sql database with a type property. you can create type property as string value and change your interfaces as a class to check instanceOf in your function.

class Circle {
    type: string;
    radius: number;
}

class Square {
    type: string;
    length: number;
}

const shapes: (Circle | Square)[] = [
    { type: "circle", radius: 1 },
    { type: "circle", radius: 2 },
    { type: "square", length: 10 }];

function getItems(type: string) {
    return shapes.filter(s => s.type == type);
    // Think of this as items coming from a database
    // I'd like the return type of this function to be
    // deterministic based on the `type` value provided as a parameter. 
}

const circles = getItems("circle");
for (const circle of circles) {
    if (circle instanceof Circle) {
        console.log(circle.radius);
    } else if (circle instanceof Square) {
        console.log(circle.length);
    }
} 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X