El error completo:
This expression is not callable. No constituent of type 'true | CallableFunction' is callableEste es el código que estaba provocando el error:
public static base( text, callB: boolean | CallableFunction = false, ) { const sw = Swal.fire({ text, }); if (callB) { sw.then(callB()); } }Cambié el tipo de callB a:
callB: (param: any) => void |boolean = falsey cuando elimino la definición de tipo callB:
callB= falseme sale este error:
This expression is not callable. Type 'Boolean' has no call signaturesEsto es lo que estás buscando:
function base(text: string, callB: false | CallableFunction = false) { console.log(text); if (callB) { callB(); } } Esencialmente, desea pasar una función o false . Cuando es verdad, desea llamar a la función.
Pero según tu definición
function base(text: string, callB: boolean | CallableFunction = false) { console.log(text); if (callB) { callB(); } } esta sería una base('some str', true) donde callB es true y no una función que intentará ejecutar usando callB() . No booleano no es invocable, ¿verdad? De ahí el error.
Enlace de TS Playground: https://tsplay.dev/m056qW
El tipo
boolean | Functiones equivalente a
true | false | Function Ahora, debido a que un valor de tipo Function es verdadero, su verificación
if (callB) reduce el tipo de callB a
true | Function y true no es invocable, de ahí el error.
No está claro cómo debe usarse su método base , por lo que he esbozado dos soluciones:
Si true no es una entrada válida, ajuste su tipo de parámetro en consecuencia
static base( text, callB: false | CallableFunction = false ) { if (callB) { callB(); } } Si true es un caso que debe manejar, use una verificación condicional más precisa como
if (typeof callB === 'function') { callB() // OK }Si usa false | Callablefunction (o boolean | CallableFunction ), puede forzar el tipo usando typeof :
static base( text, callB: false | CallableFunction = false ) { if (typeof callB === "function") { callB() } }