2017-08-03 50 views
2
function Foo(): string {} 

意味着Foo是返回string的函數。如何定義命名函數的類型?

interface SFC { 
    (props: Props): any; 
} 

const Foo: SFC = p => {}; 

就是說Foo是一個匿名函數相匹配的簽名SFCpProps類型。

如何聲明function Foo()匹配SFC?語法是什麼?

即,我想使用function關鍵字(而不是const)聲明一個函數,而函數本身的類型爲SFC


這些不工作:

function Foo: SFC() {} 
function Foo() {}: SFC 

回答

1

我要聲明使用function關鍵字(不是常數)和函數本身的類型是證監會的功能。

你不行。你不應該,因爲const給你所有你需要的。

name財產

好的瀏覽器將添加例如爲你鉻。

enter image description here

+0

它們100%是否相等? TSX編譯器是否將'displayName'添加到以這種方式聲明的React無狀態功能組件? – mpen

+0

我不認爲匿名函數有名字,但顯然[他們](https://gist.github.com/mnpenner/3e112138dfb3ba6f49662b51ec60726e),但不是當他們像*真*匿名(包裝一個IIFE而不是分配給一個var)。 – mpen

+1

你也可以命名該函數,如:'const Foo:SFC = function Foo(){};' – jcalz

1

打字稿使用duck typing,所以Foo功能是SFC型的,如果它們的結構相匹配。

interface SFC { 
    (props: any): any; 
} 

function Foo(props: any): any { 
    console.log(props); 
} 

let sfc: SFC = Foo; // Foo is of type SFC. 
sfc("Foo"); 
+0

這不是我正在尋找的答案,但我想這是我需要聽到的答案。這實際上足以滿足我的需求。我只是想在道具上強加一個類型,然後這個函數本身仍然是一個「SFC」,所以它會通過我的其他類型檢查。好東西!如果我這樣做,我不會檢查返回類型。即它不會檢查我沒有搞錯函數定義。 – mpen

+0

我不確定你說的是什麼。您可以爲道具指定其他類型。 – Rodris

相關問題