GAミント至上主義

Web Monomaniacal Developer.

TypeScriptでオプション的なオブジェクトをデフォルト値つきでいい感じに扱う

関数の引数や、クラスのコンストラクタとかでオプション系の値をオブジェクトで受け取るときに、いい感じに省略可能にする方法をよく忘れるのでメモ。

interface HogeFunctionOptions {
  optionFoo: string
  optionBar: string
  optionBuzz: string
}

const defaults = {
  optionFoo: 'default value',
  optionBar: 'default value',
  optionBuzz: 'default value',
}

function hogeFunction(options = {} as Partial<HogeFunctionOptions>) {
  const {
    optionFoo,
    optionBar,
    optionBuzz
  } = { ...defaults, ...options }
  // continue
}

ポイントは3つ

組み込みのPartialで省略可能にする

TypeScript: Handbook - Utility Types

スプレッド構文で上書き

キーが重複する場合は後ろの値(↓の例だとoptions)で上書きされる

{ ...defaults, ...options }

f:id:uyamazak:20201106142921p:plain

スプレッド構文 - JavaScript | MDN

分割代入で必要なものだけ取り出し

オプションのオブジェクトのまま使うより明示的で好み

const {
    optionFoo,
    optionBar,
    optionBuzz
}

分割代入 - JavaScript | MDN


速習 TypeScript 第2版 速習シリーズ

速習 TypeScript 第2版 速習シリーズ

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

  • 作者:Boris Cherny
  • 発売日: 2020/03/16
  • メディア: 単行本(ソフトカバー)