繁体   English   中英

没有'true | 类型的成分 CallableFunction' 是可调用的

[英]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) ,其中callBtrue ,而不是 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM