使用这样的函数,返回值将始终是真实的,不是必需的true
,而不是必需的any
。有没有办法定义这个函数的返回值是truthy
?
function cleanTruthy (value: any) {
if (!value) return true
return value
}
答案 0 :(得分:1)
似乎可以通过在单独的模块声明中重载方法来实现。以下工作(我不确定是否可能没有模块声明):
/* @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);
但是,类型多态通常不是最好的方法,每次更改模块文件时都必须重新编译流程。
更好的方法可能是创建一个这样的函数,它返回一个基于真实性逻辑的实体布尔值:
function isTruthy(v: any): boolean {
return !!v;
}
if(isTruthy(v)) {
// do something
}