本当にただのメモ

なるべく Qiita に投稿しよう

TypeScript の関数の引数/戻り値周りの知識が曖昧になってきたので学び直し 

関数の引数

引数の型を何も定義しない === 引数は何も受け付けないことを定義していいる ことに注意。

const func1 = () => { }
func1()   // OK
func1('') // Error

const func2 = (msg: string) => {
    alert(msg)
}
func2('Hello') // OK
func2(100)     // Error
func2()        // Error

省略可能な引数

const func1 = (foo?: string) => {
    if (foo) {
        alert(foo)
    } else {
        alert('undefined')
    }
}

func1()      // OK
func1('Foo') // OK

オブジェクトを引数に取る関数

const func = (args: {foo: string, bar?:string}) => {
    alert(args.foo)
    if (args.bar) alert(args.bar)
}
func({ foo: "Foo" })             // OK. bar は省略可能なので。
func({ foo: "Foo", bar: "Bar" }) // OK
func({})                         // Error. 必須のプロパティを省略しているため

関数の戻り値

const func = (): { foo: string, error?: Error } => {
    // どっちも OK
    return { foo: "Foo" }
    return { foo: "Foo", error: new Error('error') }
}

コールバック引数の引数

引き数をもたないパターン

const func = (cb: () => void) => {
   cb()
}

引数をプリミティブで定義

const func = (cb: (msg: string) => void) => {
    cb('Hello') // OK
}

cb の引数をオブジェクトで定義

const func = (cb: (args: {msg: string}) => void) => {
    cb({msg: 'Hello'}) // OK
}

// 間違えやすいが、下記のように書いたらエラー
const func = (cb: (args: {msg: string}) => void) => {
    cb({msg: 'Hello'}) // OK
}