¿Cómo puedo devolver el mismo tipo que paso a una función en Typescript?
Tengo una función a la que me gustaría poder pasarle una clase y que devuelva el mismo tipo que esa clase.
Actualmente, la mejor manera que he encontrado es así:
protected modClass<CLASS_TYPE>(modMe: CLASS_TYPE): CLASS_TYPE {
console.log(modMe);
return modMe;
}
const modded = modClass<SomeClass>(new SomeClass());
Lo anterior no es terrible, funciona, pero en realidad no está devolviendo el tipo de la clase pasada a la función tanto como teniendo el tipo predefinido y negándose a aceptar cualquier otro tipo de clase.
Lo que me gustaría poder hacer (por ejemplo) es esto:
const modded = modClass(new SomeClass());
console.log(typeof modded); // SomeClass;
¿Hay alguna manera de crear una función que devuelva el tipo de uno de sus argumentos en TypeScript?
Editar: Debería mencionar que no solo estoy intentando que el tipo sea correcto, sino que sea verificado. Podría hacer que la función modClass devuelva tipo any y typeof sería correcto. Simplemente no tendría ninguna verificación de tipo real.
Respuesta #1
typeof es el operador de Javascript cuando se usa en expresiones y devolverá object para clases como se supone que debe hacerlo.
En cuanto a tu función, el parámetro genérico será inferido correctamente por el compilador, no tienes que especificarlo explícitamente. (Cambié el nombre para ajustarlo a las convenciones, pero debería funcionar de todos modos)
class SomeClass{
bar(){}
}
function modClass<T>(modMe: T): T {
console.log(modMe);
return modMe;
}
const modded = modClass(new SomeClass()) // modded is SomeClass
modded.bar()
Enlace del parque
