LoginSignup
2
2

More than 3 years have passed since last update.

TypeScriptでoptionalなmethodを定義する

Posted at

optionalなmethodの定義方法

interface Hoge {
  foo?(arg1: string): void
}

こう書けば、fooはあってもなくてもよく、ある場合にはこの定義に従ってくれます。

公式ドキュメントですぐに探せなかった内容なので、ここで共有いたします。

GitHubでは https://github.com/microsoft/TypeScript/issues/6413
こちらに議論されています、2016年ごろにはもうあったとのこと。

知らなかったのでつらい思いをした話

このoptional methodの記法を知らなかった僕は、
関数プロパティでできるじゃん! という方法で解決していた。

すなわち下記のように、

関数プロパティでoptionalを実現
interface Hoge {
  foo?: (arg1: string) => void
}

関数をプロパティとして定義するのです。

これでもまあ、ほぼやりたいことは実現できていたのですが、なんと衝撃的なことに、

TypeScriptではメソッドと関数プロパティは違う

という事実があり、これにハマってしまったのです。

ということで↑の記事と合わせてお読みくださいませ...

playgroundへのリンク

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2