首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通用高阶函数的不相容流类型

通用高阶函数的不相容流类型
EN

Stack Overflow用户
提问于 2017-04-13 14:23:57
回答 1查看 377关注 0票数 0

Flow说,下面voidnullify返回的类型是不兼容的。我想我漏掉了什么?

代码语言:javascript
复制
import faker from 'faker'

type P =
  | string
  | number
  | boolean

function voidnullify(func: () => P): ?P {
  const random: number = faker.random.number({
    min: 1, 
    max: 10
  })

  const result = func()

  if (random <= 7) return result
  else if (random <= 9) return null
  else return undefined
}

function someBoolean() {
  return true
}

function someString() {
  return "hello"
}

function someNumber() {
  return 1
}

let maybeNum: ?number
let maybeStr: ?string
let maybeBool: ?boolean

maybeNum = voidnullify(someNumber) 
maybeStr = voidnullify(someString) 
maybeBool = voidnullify(someBoolean) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-13 16:25:45

我认为你所做的一切都是没有根据的。我不确定它是否应该工作,但由于您只是想保护输入类型(看起来像?),在流中这样做的正确方法是使用有界的多态+泛型参数:

代码语言:javascript
复制
type P =
  | string
  | number
  | boolean

function voidnullify<A: P>(func: () => A): ?A {
  const random: number = faker.random.number({
    min: 1, 
    max: 10
  })
  ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43394861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档