2017-08-03 103 views
0

比如我得到這個FN:如何根據參數字符串定義返回類型?流動型的JavaScript

const aCar = {type: 'car', wheels: 4}; 
const aBike = {type: 'bike', wheels: 2}; 

const fn = (type:'a'|'b'):Car|Bike => { 
    if(type === `a`) return aCar; 
    if(type === `b`) return aBike; 
} 

的問題是,回總是BikeCar indipendently的類型。我想強制執行的是,當類型爲a時,返回總是爲Car,當爲b時,類型爲Bike

這可能嗎?

東西very close

// @flow 

const items = [1, 2, 3]; 

type FirstType = ((_: 'a') => number) & ((n: 'b') => Array<number>); 

const first: FirstType = (n):any => { 
    if (n === "a") { 
    return items[0]; 
    } else if(n === 'b') { 
    return items; 
    } 
} 

const a: number = first('a'); 
const b: Array<number> = first('b'); 

感謝

+0

使用[泛型](https://flow.org/en/docs/types/generics/)? –

+0

泛型僅在輸入與輸出類型相同時才起作用。在這種情況下,輸入是一個字符串「a」,輸出是一個對象。輸入和輸出之間的映射必須在'fn'中完成,而不是在父項中完成,因爲父項無法知道如何匹配。 –

回答

1

我找到了一種方法做我需要這個代碼。重載函數,然後使用參數作爲對象來定義返回值。相當好的解決方案,但可能會更好。

注:formatNotification參數只能是一個對象,而不是2個參數等formatNotification(type, data)

仍然不是一個好的解決方案,但中途工作。

enter image description here

而且類型:

enter image description here

相關問題