homusuke
@homusuke (がみん)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

TypeScriptでプロパティにメソッドを与えたときの型について

Q&A

Closed

前情報

TypeScriptの超初心者です。
調べてもうまく答えにたどり着かず、アドバイスいただければと思います🙇‍♂️

やりたいこと

  • メソッドを含めたオブジェクトのリテラルを宣言する。
  • メソッドは?とする。
  • メソッドを実行する。
  type Animal = {
    name: string
    fly?: ()=>{} // 1.
  }
  const falcon: Animal = {
    name: '',
    fly(): string { return this.name + 'が飛んだ' } 
  }
  falcon.fly() // 2.

わからないこと

1. flyのリテラル

()=>{}でエラーにはならないけど、正しく書けているのかわかりません。

アドバイスがあればお願いします。

2. flyの実行

undefinedの可能性があるものは実行できません。それでも?を利用したい場合、どのように記述するべきなのでしょうか?
?

0

1Answer

クローズされてるので解決済みかもしれませんが、
1.引数なし文字列を返すメソッドをプロパティに持たせたい場合メソッド名: () => 戻り値の型のように書きます。

type Animal = {
    name: string;
    fly?: () => string;
}

2.TypeScript3.7以降で実装されたoptional chainingを用いるといいです。

falcon.fly?.(); // flyがundefindやnullのときは実行されない

それ以前のバージョンだとだとif文で存在するか確認する必要があります。

if (falcon.fly != null) { // flyがundefindやnullのときは実行されない
  falcon.fly();
}

optional chainingに関してはこちらが参考になります
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Optional_chaining
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#optional-chaining

1Like

Comments

  1. @homusuke

    Questioner

    ありがとうございます!
    知識がまた一つ増えました

Your answer might help someone💌