使用这样的函数,返回值将始终为真值,不需要true
,也不需要any
。有什么方法可以定义此函数的返回值为 truthy
吗?
function cleanTruthy (value: any) {
if (!value) return true
return value
}
最佳答案
这似乎可以通过在单独的模块声明中重载方法来实现。以下工作(我不确定如果没有模块声明是否可行):
/* @flow */
declare function cleanTruthy(V: false | 0 | null | typeof undefined | ""): true;
declare function cleanTruthy<V: any>(v: V): V;
const truthy: 1 = cleanTruthy(1);
const falsy: true = cleanTruthy(false);
但是,类型多态通常不是最好的方法,每次更改模块文件时,flow 都必须重新编译。
更好的方法可能是创建一个这样的函数,它根据真实性逻辑返回一个实体 boolean 值:
function isTruthy(v: any): boolean {
return !!v;
}
if(isTruthy(v)) {
// do something
}
关于javascript - 如何在 Flowtype 中将返回值定义为 truthy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40616688/