UNIT 2 講義ルート

DRILL 04 / コレクション

オブジェクト型と省略可能なプロパティ

type で値の形を定義し、省略される値へ安全な代替値を用意します。

目安 10分 TypeScript type alias / object
COURSE ROUTETypeScript Foundation
0 / 8
MISSION 04講義ルートを確認
  1. UNIT 1 · DRILL 01基本型OPEN
  2. UNIT 1 · DRILL 02関数OPEN
  3. UNIT 2 · DRILL 03配列OPEN
  4. UNIT 2 · DRILL 04オブジェクトACTIVE
  5. UNIT 3 · DRILL 05ユニオン型OPEN
  6. UNIT 3 · DRILL 06タプルOPEN
  7. UNIT 4 · DRILL 07MapOPEN
  8. UNIT 4 · DRILL 08ジェネリクスOPEN

YOUR TASK

displayUser() を完成させる

ユーザーの表示名と役割を `表示名 [role]` の形式で返してください。nickname がない場合は name を表示名にします。

入力
user は name、role、任意の nickname を持つオブジェクトです。
出力
nickname を優先した表示用文字列を返します。

BEFORE CODING

nickname がないときの表示名

nickname の末尾に ? を付けると、そのプロパティがないオブジェクトも User として受け取れます。関数内では nickname が undefined の可能性を考え、先に displayName を決めてから出力を組み立てます。

{ name: "Taro", role: "admin" } → "Taro [admin]"
01

? は値の欠落を型に含める

nickname?: string は、nickname が string または undefined であることを表します。プロパティを読み取った直後には string と決めつけられません。

02

?? は undefined のときだけ補う

user.nickname ?? user.name は、nickname がないときだけ name を使います。空文字列を勝手に name へ置き換えない点が || との違いです。

SYNTAX RECALL

確認する構文

type User = {
  name: string;
  nickname?: string;
};

const label = user.nickname ?? user.name;
  • オブジェクトの形を type で定義する
  • ? で省略可能なプロパティを表す
  • ?? で undefined の場合だけ代替値を使う

STEPWISE HINTS

ヒント

01最初の一手

nickname の型には `?` を付けます。

02処理の組み立て

`nickname ?? name` は nickname が undefined の場合に name を選びます。

03コードの形

選んだ表示名と role をテンプレート文字列へ入れます。

AFTER ACCEPTED

解説

AC 後に解説が開きます

まずは自分の言葉で方針を説明し、コードに落としてみましょう。