Genérico Tiposcript Método para devolver cualquiera de los tipos clave del objeto o tipo de objeto en sí basado en la entrada

Quiero definir un método de tipografía donde el método podría devolver un tipo de Objeto o cualquier propiedad del Objeto. por ejemplo

Person {
   Education,
   Bio
}

La función genérica podría regresar. Person o Education o Bio basado en la entrada proporcionada permite decir Enum para el tipo.

let person = testFunction(TypePerson); // complete person 

let personEducation = testFunction(TypeEducation); // person's education

El tipo de persona es sólo por ejemplo, pero aquí podría ser cualquier cosa y propiedades no se conocerán por adelantado.

Por ejemplo, en lugar de Persona...

Vehicle {
  PropertyType1,
  SomeProperties
}

Pregunta hecha hace 3 años, 4 meses, 27 días - Por bytebarricade


3 Respuestas:

  • Creo que estás preguntando sobre la sobrecarga de funciones.

    interface Person {
      Education: string;
      Age: number;
    }
    
    interface Vehicle {
      doors: number;
      color: 'pink' | 'red';
    }
    
    enum Data {
      person = 'person',
      car = 'car'
    }
    
    function getData(data: Data.car): Vehicle
    function getData(data: Data.person): Person
    function getData(data: Data) {
      return 'your implementation' as any
    }
    
    const result1 = getData(Data.person) //Person
    const result2 = getData(Data.car) //Vehicle
    

    Aquí. puede encontrar más información

    Respondida el Dec 18, 2020 a las 18:32 - por nasean

    Votos positivos: 0 | Votos negativos: 0

  • Para lograr esto en TypeScript, puedes definir una función genérica que tome un tipo de enum como argumento y utilice una instrucción switch para determinar qué tipo devolver. Aquí tienes un ejemplo de cómo podrías implementar esta función:

    typescript
    enum TypePerson {
        Education,
        Bio
    }
    
    enum TypeVehicle {
        PropertyType1,
        SomeProperties
    }
    
    function testFunction(input: T): T {
        switch (input) {
            case TypePerson.Education:
                return TypePerson;
            case TypePerson.Bio:
                return TypePerson;
            case TypeVehicle.PropertyType1:
                return TypeVehicle;
            case TypeVehicle.SomeProperties:
                return TypeVehicle;
            default:
                throw new Error('Unknown type');
        }
    }
    
    let person = testFunction(TypePerson.Education); // Returns TypePerson
    let personEducation = testFunction(TypePerson.Bio); // Returns TypePerson
    
    let vehicleProp1 = testFunction(TypeVehicle.PropertyType1); // Returns TypeVehicle
    let vehicleProps = testFunction(TypeVehicle.SomeProperties); // Returns TypeVehicle
    

    En este ejemplo, la función testFunction toma un valor de un enum (por ejemplo, TypePerson o TypeVehicle) como entrada y devuelve el mismo tipo de enum como resultado. Puedes ampliar esta función para manejar cualquier enum y devolver el tipo correspondiente basado en la entrada proporcionada.

    Respondida el Dec 19, 2020 a las 18:29 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Claro, aquí tienes un ejemplo de cómo definir un método genérico en TypeScript que te permite devolver un tipo de objeto o cualquier propiedad de ese objeto según la entrada proporcionada:

    typescript
    interface Person {
      Education: string;
      Bio: string;
    }
    
    enum Type {
      Person,
      Education,
      Bio
    }
    
    function testFunction(type: T, obj: Person): T extends Type.Person ? Person : T extends Type.Education ? string : T extends Type.Bio ? string : never {
      switch (type) {
        case Type.Person:
          return obj;
        case Type.Education:
          return obj.Education;
        case Type.Bio:
          return obj.Bio;
      }
    }
    
    let person = testFunction(Type.Person, { Education: "B.S. Computer Science", Bio: "Software Engineer" }); // complete person
    
    let personEducation = testFunction(Type.Education, { Education: "B.S. Computer Science", Bio: "Software Engineer" }); // person's education
    

    El método testFunction toma dos parámetros: type y obj. El parámetro type es un valor de enumeración que especifica el tipo de valor que se debe devolver. El parámetro obj es el objeto del que se debe devolver el valor.

    El método testFunction utiliza una declaración switch para determinar qué tipo de valor devolver en función del valor del parámetro type. Si el valor del parámetro type es Type.Person, el método devuelve el objeto completo. Si el valor del parámetro type es Type.Education, el método devuelve la propiedad Education del objeto. Si el valor del parámetro type es Type.Bio, el método devuelve la propiedad Bio del objeto.

    Puedes utilizar el método testFunction para devolver cualquier tipo de valor de un objeto, incluidas las propiedades anidadas. Por ejemplo, podrías utilizar el método testFunction para devolver la dirección de una persona de un objeto de persona que contiene una propiedad de dirección.

    Respondida el Dec 19, 2020 a las 18:36 - por Gemini

    Votos positivos: 0 | Votos negativos: 0