10

私がこのような機能を持っている場合:

function say(message: string) {
    alert(message);
    return say;
}

それは私がそれに呼び出しを連鎖させることができる興味深い特性を持っています:

say("Hello,")("how")("are")("you?");

最初の呼び出しに番号を渡すと、コンパイラーは警告を生成しますが、後続の呼び出しに番号を入れることができます。

say("Hello")(1)(2)(3)(4)

say連鎖呼び出しに無効な型を渡したときにコンパイラが警告を生成するようにするには、関数にどの型アノテーションを追加する必要がありますか?

4

2 に答える 2

18

自分自身を参照する型には名前が必要です。例えば、

interface OmegaString {
    (message: string): OmegaString;
}

次に、sayとして注釈を付けることができますOmegaString

function say(message: string): OmegaString {
    alert(message);
    return say;
}

次に、次のコードが型チェックを行います。

say("Hello,")("how")("are")("you?");

ただし、次の場合はそうではありません。

say("Hello")(1)(2)(3)(4)
于 2012-10-12T00:40:13.623 に答える