typescript - 为什么函数本身在 TypeScript 中评估为 true?
问题描述
我最近开始学习 TypeScript。我想知道为什么在这种语言中没有错误/警告的以下施工工作:
function f(): boolean {
return false;
}
if ( f ) {
performSomeAction();
}
(并且实际上会运行代码的条件部分),而大多数程序员可能会承认这是一个错字(缺少函数的调用括号)并以这种方式重写它:
if( f() ){
performSomeAction();
}
我的意思是,评估函数对象是否有任何真实的理由?或者更确切地说,它只是使代码更容易受到此类错误的影响?
[解决方案] 为了避免这种错误,可以改变编码风格。在条件语句中,可以使用“===”严格的相等性检查,这在第一个示例中将导致“Operator '===' cannot be applied to types '() => boolean' and 'boolean'”TypeScript 编译器错误.
解决方案
评估函数对象是否有任何真实的理由?
它允许您测试它们是否存在。
例如,一个 JavaScript 库可能有插件,可以选择允许实现函数。然后它可以测试插件是否实现了该功能,如果实现了,则使用它。
至于这是否是好的做法超出了这个答案的范围,但 JavaScript 允许这样做,所以 TypeScript 支持它。
不过,有一种方法可以修改您的编码风格以检测这种类型的错误。
Using===
将进行“严格”相等性检查,这还将测试被比较的两个值的类型。if( f === true )
将导致类型不匹配错误“运算符'==='不能应用于类型'() => boolean'和'boolean'”。
推荐阅读
- python - 使用 MongoDB 的嵌套文档创建 Pandas 表
- c++ - 为什么我会在此遇到“标准输出无响应”错误?
- r - SVM 插入符号错误:“无法计算标准偏差......缺少 TRUE/FALSE 需要的值”
- python-3.x - 如何使用 python selenium 选择 jira 中的第一个条目
- xml - 如果事先不知道 Java 对象,如何将 XML 转换为 Java 对象?
- java - 需要帮助理解这种插入方法的结构
- css - 溢出相对定位父级的绝对定位伪元素设置为溢出:隐藏
- amazon-web-services - 由于变量太长,AWS CLI S3 COPY 命令获取 FINDSTR 错误?
- javascript - 当我单击类别时打开子类别但是当我单击子类别时未打开它的子类别
- java - 如何使用java jersey将示例json对象添加到swagger body?