2016-09-24 43 views
3

當我試圖讓這個註解流動型不檢查類型流動型註釋回調

declare function MyType(x: number): void; 
type PropsT = { 
    onClick?: MyType; 
}; 

props.onClick && props.onClick(); // no check 

,但這個工程。

type PropsT = { 
    onClick?: (x: number) => void; 
}; 
props.onClick && props.onClick(); // ERROR 

問題 - 爲什麼?

回答

6

當您編寫declare function MyType時,您不聲明類型名稱MyType,但聲明存在具有指定簽名的函數MyType。所以,MyType是一個值,而不是一個類型。通常,當您將值用作類型時,Flow將打印如下所示的內容:

Ineligible value used in/as type annotation (did you forget 'typeof'?) 

唯一的例外是函數。流允許使用的功能類型來支持舊樣式類:

function Foo() {} 
const foo: Foo = new Foo(); 

不幸的是,這樣的類的行爲,主要是不安全的,流量推斷一些屬性的類型,但把一切爲any

長話短說,你需要添加typeof

type PropsT = { 
    onClick?: typeof MyType; 
};