2017-04-13 21 views
0

フローには、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) 

答えて

1

あなたがしていることをやっていることはちょうどサポートされていないと思います。

:それは 仕事をする必要がありますが、あなただけの入力タイプを守るためにしようとしているとして(?それがどのように見える)、フローに有界多型+一般的なパラメータであることを行うための適切な方法かどうかはわかりません
type P = 
    | string 
    | number 
    | boolean 

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

私がPをXに変更した場合、または共用体型の1つを削除した場合でも、フローは「エラーなし」と表示されます。これは偽陽性です。 –

+0

申し訳ありませんnvm、実際には、おかげでたくさん動作します –

関連する問題