TypeScript 完全な型シグネチャ

オーバーロード以外で、完全な型シグネチャを使用するケースです。

以下のように関数にプロパティがある時に、その関数のシグネチャとプロパティ(wasCalled)を完全な型シグネチャで表現します。

WarnUser型は、文字列を受け取ってアラートを出力する。ただし、アラートをあげるのは一度だけ。

type WarnUser = {
    (warn: string): void
    wasCalled: boolean
}

const warnUser: WarnUser = (warn: string) => {
    if(warnUser.wasCalled) return
    warnUser.wasCalled = true
    alert(warn)
}
warnUser.wasCalled = false

wasCalled については、後から割り当てればTypeScriptのエラーにはならない。

シグネチャとは

関数やメソッドの名前、引数の数やデータ型、返り値の型などの組み合わせのこと。

参考 https://www.oreilly.co.jp/books/9784873119045/