90160


TypeScript初心者です。  
とあるプロジェクトの、他の方が作成したコードを見ながら型定義について勉強をしているのですが、関数の戻り値に対して以下の画像のように「Function」という型付けをしている箇所がありました（状況説明のため簡略化したコードになります）

[![画像](https://i.stack.imgur.com/cBw45.png)](https://i.stack.imgur.com/cBw45.png)

**戻り値の型として指定した「Function」というのはいったん何を意味しているのでしょうか？**  
プロジェクト内に、「interface
Fuction」と、インターフェースを宣言している箇所も見当たらず、この型付けが意味しているところが理解できておりません。

ご存知の方いらっしゃいましたら教えていただけると大変助かります。  
どうぞよろしくお願いいたします。


CC BY-SA 4.0
2022-07-23T08:29:33.113
90159
2022-07-23T08:53:23.803
2022-07-23T08:39:26.713
2238
53656
question
typescript
関数の戻り値に対する型付けについて


hogeという関数の返り値（v)が、stringやbooleanではなくfunction、つまり関数であることを型によって表現していると見られます。

# 1

[![返り値がFunction型であるfunctionにおけるts挙動](https://i.stack.imgur.com/1MVQY.png)](https://i.stack.imgur.com/1MVQY.png)

Function型の変数には() => {}のような関数オブジェクトが入ります。  
() => {}は何も受け取らず何も返さない空の関数で少しシンプルすぎる例ではありますが...。  
赤線が引いてあるところからわかるように、stringなど関数でないオブジェクトを入れると上手くいかないことがわかります。

# 2

簡略化されたコードをそのまま解釈すると

[code]

    function hoge(val: any): Function {
       return val
    }
    
[/code]

であればvalは関数型なので

[code]

    function hoge(val: Function): Function {
       return val
    }
    
    
[/code]

として良いと思われます。

# 3

そもそも関数の返り値に関数を持てる、という発想があります。  
例として「numをかける関数」を作る関数、は以下のように定義・使用できます。

[code]

    function hoge(num: number): Function {
       return (val: number) => {
          return val * num
       }
    }
    
[/code]

このように変数に関数を持つという表現が許される言語のことを第一級関数を持つ言語であると呼んだりします。  
もしかする第一級関数についてのイメージがなかった故に上記の疑問をおもちになられたのではないか、という想像の上で、解答させていただきました。（筋違いであればすみません。）


CC BY-SA 4.0
2022-07-23T08:53:23.803
90160
2022-07-23T08:53:23.803
53657
90159
answer