0Pricing
TypeScript Academy · レッスン

PartialとRequired:オプション性の切り替え

すべてのプロパティを一度にオプションまたは必須にします。

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

概要

Partial はすべてのプロパティをオプションにし、Required はすべてのプロパティを必須にします。これらは、柔軟なデータ操作で最もよく使われるユーティリティ型です。

Partial<T>

Partial は T のすべてのプロパティをオプションにします。すべてのフィールドがそろっていない更新やパッチ処理に便利です。
interface User { id: number; name: string; email: string; }
type PartialUser = Partial<User>;
// { id?: number; name?: string; email?: string; }

更新関数での Partial

変更されたフィールドだけを受け取る更新関数やマージ関数を実装するときは、Partial を使用します。
function updateUser(id: number, changes: Partial<User>): User {
  const existing = findUser(id)!;
  return { ...existing, ...changes };
}

Required<T>

Required はすべてのオプショナル修飾子を削除し、すべてのプロパティを必須にします。
type RequiredUser = Required<User>;
// All properties are now required — including those that were optional

設定の検証に使う Required

デフォルト値をマージした後に Required を使用すると、すべての設定値が存在することを保証できます。
interface Config { host?: string; port?: number; }
const defaults: Required<Config> = { host: 'localhost', port: 3000 };
function createConfig(opts: Config): Required<Config> {
  return { ...defaults, ...opts };
}

Partial の実装方法

Partial は `+?` 修飾子を使ったマップ型で実装されています。
type Partial<T> = { [K in keyof T]?: T[K] };
// Equivalent to: { [K in keyof T]+?: T[K] }

Required の実装方法

Required は `-?` 修飾子を使ったマップ型で実装されています。
type Required<T> = { [K in keyof T]-?: T[K] };

Deep Partial

組み込みの Partial は浅い変換です。ネストしたオブジェクトには、再帰的な DeepPartial が必要です。
type DeepPartial<T> = {
  [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K]
};

Partial と Required の組み合わせ

交差型を使用すると、一部のフィールドを必須にしながら、他のフィールドをオプションのままにできます。
// id required, everything else optional
type UpsertUser = Required<Pick<User, 'id'>> & Partial<Omit<User, 'id'>>;

Partial とインターフェースのオプショナルプロパティの違い

インターフェースのすべてのプロパティをオプションとして宣言する方法は、その特定の型に対してだけ Partial を適用する場合と同じです。Partial はどの型でも再利用できます。

Partial による型推論

TypeScript は Partial のプロパティを正しく絞り込みます。そのため、アクセスした値は T[K] | undefined になることがあります。
function show(u: Partial<User>) {
  if (u.name !== undefined) {
    console.log(u.name.toUpperCase()); // safe
  }
}

確認問題

以前はオプションだったプロパティも含め、インターフェースのすべてのプロパティを必須にするユーティリティ型はどれですか?

まとめ

Partial はすべてのプロパティをオプションにします(パッチや更新に便利です)。Required はすべてのプロパティを必須にします(マージ後の検証に便利です)。どちらも浅い変換であるため、ネストした型には再帰版を使用します。

よくある質問

「PartialとRequired:オプション性の切り替え」レッスンは無料ですか?

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

「PartialとRequired:オプション性の切り替え」で何を学びますか?

すべてのプロパティを一度にオプションまたは必須にします。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「PartialとRequired:オプション性の切り替え」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. PartialとRequired:オプション性の切り替え
  2. PickとOmit:プロパティの選択
  3. Record:キーと値の型の対応付け
  4. Readonly、Exclude、Extract、NonNullable
← TypeScript Academyに戻る