Búsqueda de sitios web

¿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

Artículos relacionados