[英]TypeScript: This expression is not callable. No constituent of type 'ExportValue' is callable. WebAssembly module
[英]No constituent of type 'true | CallableFunction' is callable
完整的错误:
This expression is not callable.
No constituent of type 'true | CallableFunction' is callable
这是触发错误的代码:
public static base(
text,
callB: boolean | CallableFunction = false,
) {
const sw = Swal.fire({
text,
});
if (callB) {
sw.then(callB());
}
}
我将 callB 的类型更改为:
callB: (param: any) => void |boolean = false
当我删除 callB 类型定义时:
callB= false
我收到此错误:
This expression is not callable.
Type 'Boolean' has no call signatures
这就是您要查找的内容:
function base(text: string, callB: false | CallableFunction = false) {
console.log(text);
if (callB) {
callB();
}
}
本质上,您想传递 function 或false
。 当它是真的时,你想打电话给 function。
但是按照你的定义
function base(text: string, callB: boolean | CallableFunction = false) {
console.log(text);
if (callB) {
callB();
}
}
这将是一个有效的调用base('some str', true)
,其中callB
为true
,而不是 function ,它将尝试使用callB()
执行。 不是 boolean 是不可调用的,是吗? 因此错误。
TS游乐场链接: https://tsplay.dev/m056qW
如果你使用false | Callablefunction
false | Callablefunction
(或boolean | CallableFunction
),您可以使用typeof
强制类型:
static base(
text,
callB: false | CallableFunction = false
) {
if (typeof callB === "function") {
callB()
}
}
类型
boolean | Function
相当于
true | false | Function
现在因为Function
类型的值是真实的,请检查
if (callB)
将callB
的类型缩小到
true | Function
并且true
是不可调用的,因此是错误的。
目前尚不清楚您的 API 将如何使用,因此我概述了两种解决方案:
如果true
不是有效输入,请相应调整您的参数类型
static base(
text,
callB: false | CallableFunction = false
)
如果true
是您必须处理的情况,请使用更精确的条件检查,例如
if (typeof callB === 'function') {
callB() // OK
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.