如何在Flowtype中将返回值定义为truthy?

时间:2016-11-15 18:03:05

标签: javascript boolean flowtype

使用这样的函数,返回值将始终是真实的,不是必需的true,而不是必需的any。有没有办法定义这个函数的返回值是truthy

function cleanTruthy (value: any) {
  if (!value) return true
  return value
}

1 个答案:

答案 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);

Here is a working version

但是,类型多态通常不是最好的方法,每次更改模块文件时都必须重新编译流程。

更好的方法可能是创建一个这样的函数,它返回一个基于真实性逻辑的实体布尔值:

function isTruthy(v: any): boolean {
  return !!v;
}

if(isTruthy(v)) {
  // do something
}