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

Fooは、stringを返す関数です。名前付き関数の型を定義する方法は?

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

const Foo: SFC = p => {}; 

FooSFCpタイプPropsである署名を照合匿名関数であることを意味します。

SFCに一致するfunction Foo()をどのように宣言できますか?構文は何ですか?

つまり、functionキーワード(constではなく)を使用して関数を宣言したい場合、その関数自体はSFCの型です。


これらは動作しません:私は、関数キーワード(定数ではない)と、自身がタイプSFCのある機能を使用して関数を宣言したい

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

答えて

1

できません。そしてあなたはしないでください。constは必要なものすべてを提供します。

nameプロパティ

良いのブラウザでは、例えば、あなたのためにそれを追加しますクロム。

enter image description here

+0

これらは100%相当ですか? TSXコンパイラは 'displayName'を追加して、このように宣言されたステートレス機能コンポーネントに反応しますか? – mpen

+0

私は匿名関数に名前がついているとは思わなかったが、明らかに[彼らは](https://gist.github.com/mnpenner/3e112138dfb3ba6f49662b51ec60726e)、実際には*匿名のようなものではない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

関連する問題