2017-07-18 61 views
0

我想有一個通用的函數,它(() => T) | T類型的參數流的類型,比如定義排除特定類型的

const myGenericFunction = <T>(param: ((() => T) | T)): T => { 
    if (typeof param === 'function') { return param(); } 
    return param; 
}; 

然而,在這種情況下,流量不知道,如果我通過參數() => 1,然後Tnumber,而不是() => number。我如何才能幫助流程理解T不應該是一個功能?

+0

你能否澄清你得到的錯誤?看着[測試示例](https://flow.org/try/#0PQKgBAAgZgNg9gdzCYAoVBjOA7AzgFzAFsBPAcQFNsKAnASwwDEBXbDfOnMAXjAB4AKgD4AFAAcAhjQlEAXGBGKAlDyFgBKgD7qlS+QNVgA3qjBg6UBfhJiKcS5OlEe3XgHIordp2xuVRsBoKfGYabDBHGRElAG4wAF9TQODQ8MiiGNR4zLNc3KS8s1QANykwfHlsZiIAI1oeYnIqWgYWNg4cZUMARligA),似乎功能。 – loganfsmyth

回答

0

Flow不包含「not」類型(如$Not<Function>),所以我不認爲有一個完全通用的方法來執行此操作。但是,如果T只能是一個類型的子集,你可以用綁定的泛型實現這一點:

const myGenericFunction = <T: number | string | {}>(
    param: ((() => T) | T) 
): T => { 
    if (typeof param === 'function') { return param(); } 
    return param; 
};