首页 > 解决方案 > 为什么函数本身在 TypeScript 中评估为 true?

问题描述

我最近开始学习 TypeScript。我想知道为什么在这种语言中没有错误/警告的以下施工工作:

function f(): boolean {
    return false;
}

if ( f ) {
    performSomeAction();
} 

(并且实际上会运行代码的条件部分),而大多数程序员可能会承认这是一个错字(缺少函数的调用括号)并以这种方式重写它:

if( f() ){
    performSomeAction();
}

我的意思是,评估函数对象是否有任何真实的理由?或者更确切地说,它只是使代码更容易受到此类错误的影响?

[解决方案] 为了避免这种错误,可以改变编码风格。在条件语句中,可以使用“===”严格的相等性检查,这在第一个示例中将导致“Operator '===' cannot be applied to types '() => boolean' and 'boolean'”TypeScript 编译器错误.

标签: typescriptif-statement

解决方案


评估函数对象是否有任何真实的理由?

它允许您测试它们是否存在。

例如,一个 JavaScript 库可能有插件,可以选择允许实现函数。然后它可以测试插件是否实现了该功能,如果实现了,则使用它。

至于这是否是好的做法超出了这个答案的范围,但 JavaScript 允许这样做,所以 TypeScript 支持它。

不过,有一种方法可以修改您的编码风格以检测这种类型的错误。

Using===将进行“严格”相等性检查,这还将测试被比较的两个值的类型。if( f === true )将导致类型不匹配错误“运算符'==='不能应用于类型'() => boolean'和'boolean'”。


推荐阅读