Flow说,下面voidnullify返回的类型是不兼容的。我想我漏掉了什么?
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) 发布于 2017-04-13 16:25:45
我认为你所做的一切都是没有根据的。我不确定它是否应该工作,但由于您只是想保护输入类型(看起来像?),在流中这样做的正确方法是使用有界的多态+泛型参数:
type P =
| string
| number
| boolean
function voidnullify<A: P>(func: () => A): ?A {
const random: number = faker.random.number({
min: 1,
max: 10
})
...https://stackoverflow.com/questions/43394861
复制相似问题