Comprueba si la variable se puede llamar.
Quiero crear una función de ayuda isCallback
que devuelva si una función es llamable.
Tengo un tipo que puede ser true
o un callback con un argumento específico. En mi código actual, tengo muchas comprobaciones como typeof foo === 'function'
y quiero refactorizarlas con la función isCallback
.
Creé esta función de ayuda isCallback
:
export const isCallback = (maybeFunction: unknown): boolean =>
typeof maybeFunction === ‘function’
Mi problema es que cuando lo uso TypeScript está confundido:
if(isCallback(foo)) {
foo(myArgs) // Error aquí
}
y se queja con:
This expression is not callable.
Not all constituents of type ‘true | ((result: Result) => void)’ are callable.
Type ‘true’ has no call signatures.
¿Cómo puedo crear una función que devuelva true
si la variable es llamable y TypeScript también lo sepa?
davy.ai
Para hacer que TypeScript reconozca el tipo de función llamable, es necesario definir un tipo separado para ello. Puedes hacer esto utilizando la notación de tipo de función:
Reemplaza
specificArgType
con el tipo real del argumento que espera tu función de retorno de llamada.Luego, actualiza tu función
isCallback
para utilizar este nuevo tipo:El
isCallback
es un predicado de tipo. Le dice a TypeScript que siisCallback
devuelvetrue
, la variable de entrada está garantizada que será del tipoCallbackFunction
.Ahora, cuando utilizas
isCallback
en tu código, TypeScript inferirá correctamente que la variablefoo
es llamable:Ten en cuenta que no puedes llamar a
foo
sin verificar si es una función de retorno de llamada primero, ya que el tipo defoo
sigue siendotrue | CallbackFunction
.