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
oTypeVehicle
) 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
yobj
. El parámetrotype
es un valor de enumeración que especifica el tipo de valor que se debe devolver. El parámetroobj
es el objeto del que se debe devolver el valor.El método
testFunction
utiliza una declaraciónswitch
para determinar qué tipo de valor devolver en función del valor del parámetrotype
. Si el valor del parámetrotype
esType.Person
, el método devuelve el objeto completo. Si el valor del parámetrotype
esType.Education
, el método devuelve la propiedadEducation
del objeto. Si el valor del parámetrotype
esType.Bio
, el método devuelve la propiedadBio
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étodotestFunction
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