0Pricing
TypeScript Academy · レッスン

オプションパラメーターとデフォルトパラメーター

? とデフォルト値を使って、引数がない場合に対応します。

「オプションパラメーターとデフォルトパラメーター」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。

ようこそ

TypeScriptでは、`?`を使って関数のパラメーターを省略可能にしたり、デフォルト値を指定したりできます。これにより、型安全性を保ちながら柔軟なAPIを作成できます。

?による省略可能なパラメーター

パラメーター名の後ろに`?`を追加すると、省略可能になります。関数内では、そのパラメーターの型はT | undefinedになります。
function greet(name: string, greeting?: string): string {
  return (greeting ?? 'Hello') + ', ' + name;
}

デフォルトパラメーター値

`=`を使ってデフォルト値を割り当てます。TypeScriptはデフォルト値から型を推論し、呼び出し元ではパラメーターを省略可能として扱います。
function greet(name: string, greeting: string = 'Hello'): string {
  return greeting + ', ' + name;
}
greet('Alice');         // 'Hello, Alice'
greet('Bob', 'Hi');    // 'Hi, Bob'

省略可能なパラメーターとデフォルト値の違い

省略可能な`?`は、省略された場合にundefinedを渡します。デフォルト値はundefinedを代替値に置き換えます。どちらも呼び出し元ではパラメーターを必須でなくします。
function opt(x?: number) { return x; }     // x: number | undefined
function def(x: number = 0) { return x; }  // x: number

配置ルール

省略可能なパラメーターとデフォルト値を持つパラメーターは、関数シグネチャ内で必須パラメーターの後ろに置く必要があります。
// Correct order
function create(name: string, role: string = 'user', active?: boolean) {}

// Error: required after optional
// function bad(x?: string, y: string) {}

undefinedを明示的に渡して呼び出す

デフォルト値を持つパラメーターに`undefined`を渡すと、デフォルト値を適用できます。
function log(msg: string, level: string = 'info') { console.log(level, msg); }
log('test', undefined); // level is 'info'

省略可能なパラメーターとオーバーロード

特に、存在するかどうかによって関数の動作が大きく変わる場合は、省略可能なパラメーターよりもオーバーロードを使うほうが明確になることがあります。

オブジェクトパラメーターのデフォルト値

オブジェクトパラメーターを分割代入し、各プロパティにデフォルト値を指定できます。
function connect({ host = 'localhost', port = 5432 } = {}) {
  return `${host}:${port}`;
}

配列パラメーターのデフォルト値

配列パラメーターのデフォルト値も同じように機能します。undefinedのチェックを避けるには、空の配列をデフォルト値として指定します。
function joinAll(parts: string[], sep: string = ', '): string {
  return parts.join(sep);
}

呼び出し元でのオプショナルチェーン

関数の参照自体が省略可能な場合は、存在するときだけ呼び出すためにオプショナルチェーン`?.()`を使います。
interface Config { onReady?: () => void; }
function init(config: Config) {
  config.onReady?.();
}

関数内での省略可能なパラメーターの型

関数内では、省略可能なパラメーター`x?: T`の型は`T | undefined`です。Tとして使う前に、型を絞り込む必要があります。
function process(id?: number) {
  if (id === undefined) return;
  console.log(id * 2); // id is number here
}

クイックチェック

関数本体内で`count?: number`として宣言されたパラメーターの型は何ですか?

まとめ

省略可能なパラメーターには`?`、デフォルト値には`= value`を使います。関数内で省略可能なパラメーターはT | undefinedです。デフォルト値はundefinedを自動的に置き換えます。どちらも必須パラメーターの後ろに置く必要があります。

よくある質問

「オプションパラメーターとデフォルトパラメーター」レッスンは無料ですか?

はい。「オプションパラメーターとデフォルトパラメーター」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。

「オプションパラメーターとデフォルトパラメーター」で何を学びますか?

? とデフォルト値を使って、引数がない場合に対応します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「オプションパラメーターとデフォルトパラメーター」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. パラメーターと戻り値の型注釈
  2. オプションパラメーターとデフォルトパラメーター
  3. Restパラメーターと型付きSpread
  4. void、never、関数シグネチャ
← TypeScript Academyに戻る