検索
ホームページウェブフロントエンドjsチュートリアルTypeScript ユーティリティの種類: 完全ガイド

TL;DR: TypeScript ユーティリティ タイプは、既存のタイプを変換する事前に構築された関数であり、コードをクリーンにして保守しやすくします。この記事では、ユーザー プロファイルの更新、構成の管理、データの安全なフィルターの方法など、重要なユーティリティの種類について実際の例を示して説明します。

TypeScript Utility Types: A Complete Guide

TypeScript は現代の Web 開発の基礎であり、開発者がより安全で保守しやすいコードを作成できるようにします。 TypeScript は、JavaScript に静的型付けを導入することで、コンパイル時のエラーの検出に役立ちます。 2024 年の Stack Overflow Developer Survey によると、TypeScript は開発者の間で最も人気のあるスクリプト テクノロジの中で 5 にランクされています。

TypeScript の素晴らしい機能が、その成功の主な理由です。たとえば、ユーティリティ型は、開発者が型の操作を簡素化し、定型コードを減らすのに役立ちます。ユーティリティ タイプは TypeScript 2.1 で導入され、新しいリリースごとにユーティリティ タイプが追加されています。

この記事では、TypeScript をマスターするのに役立つユーティリティの種類について詳しく説明します。

TypeScript ユーティリティの種類を理解する

ユーティリティ型は、既存の型を新しいバリアント型に変換できるようにする TypeScript の事前定義されたジェネリック型です。これらは、既存の型をパラメータとして受け取り、特定の変換ルールに基づいて新しい型を返す型レベルの関数と考えることができます。

これは、実際に型定義を複製する必要がなく、すでに存在する型の変更されたバリアントが必要になることが多いインターフェイスを操作する場合に特に便利です。

コア ユーティリティ タイプとその実際のアプリケーション

TypeScript Utility Types: A Complete Guide

部分的

Partial ユーティリティ タイプはタイプを受け取り、そのすべてのプロパティをオプションにします。このユーティリティ型は、プロパティを再帰的にオプションにするため、型がネストされている場合に特に役立ちます。

たとえば、ユーザー プロファイル更新関数を作成しているとします。この場合、ユーザーがすべてのフィールドを更新したくない場合は、部分タイプを使用して、必要なフィールドのみを更新できます。これは、すべてのフィールドが必須ではないフォームや API で非常に便利です。

次のコード例を参照してください。

interface User {
  id: number;
  name: string;
  email?: string;
}

const updateUser = (user: Partial<user>) => {
  console.log(Updating user: ${user.name} );
};

updateUser({ name: 'Alice' });

</user>

必須

Required ユーティリティ タイプは、提供されたタイプのすべてのプロパティを required に設定してタイプを構築します。これは、オブジェクトをデータベースに保存する前に、すべてのプロパティが利用可能であることを確認するのに役立ちます。

たとえば、必須 を車の登録に使用すると、新しい車のレコードを作成または保存するときに、ブランド、モデル、走行距離などの必要なプロパティを見逃すことがなくなります。これはデータの整合性の観点から非常に重要です。

次のコード例を参照してください。

interface User {
  id: number;
  name: string;
  email?: string;
}

const updateUser = (user: Partial<user>) => {
  console.log(Updating user: ${user.name} );
};

updateUser({ name: 'Alice' });

</user>

読み取り専用

Readonly ユーティリティ タイプは、すべてのプロパティが読み取り専用であるタイプを作成します。これは、重要な設定を不要な変更から保護する構成管理において非常に役立ちます。

たとえば、アプリが特定の API エンドポイントに依存している場合、それらは実行中に変更されることがあってはなりません。これらを読み取り専用にすると、アプリのライフサイクル全体を通じてそれらが一定のままであることが保証されます。

次のコード例を参照してください。

interface Car {
  make: string;
  model: string;
  mileage?: number;
}

const myCar: Required<car> = {
  make: 'Ford',
  model: 'Focus',
  mileage: 12000,
};

</car>

選ぶ

Pick** ユーティリティ タイプは、既存のタイプからプロパティのセットを選択してタイプを構築します。これは、ユーザーの名前や電子メールなどの重要な情報をフィルターで除外して、ダッシュボードまたは概要ビューに表示する必要がある場合に便利です。データのセキュリティと明確性の向上に役立ちます。

次のコード例を参照してください。

interface Config {
  apiEndpoint: string;
}

const config: Readonly<config> = { apiEndpoint: 'https://api.example.com' };

// config.apiEndpoint = 'https://another-url.com'; // Error: Cannot assign to 'apiEndpoint'

</config>

省略

Omit ユーティリティ タイプは、既存の型から特定のプロパティを除外して型を構築します。

たとえば、省略 は、電子メール アドレスなどの機密情報を含まないユーザー データを第三者と共有したい場合に便利です。これを行うには、これらのフィールドを除外する新しい型を定義します。特に API では、API 応答の外部に何が送信されるかを監視するとよいでしょう。

次のコード例を参照してください。

interface User {
  id: number;
  name: string;
  email: string;
}

type UserSummary = Pick<user>;

const userSummary: UserSummary = {
  name: 'Alice',
  email: 'alice@example.com',
};

</user>

記録

Record ユーティリティ タイプは、指定されたキーと値を持つオブジェクト タイプを作成します。これは、構造化マッピングを扱うときに便利です。

たとえば、在庫管理システムのコンテキストでは、Record タイプは品目と数量の間の明示的なマッピングを作成するのに役立ちます。このタイプの構造を使用すると、予想されるすべての成果が確実に考慮されていると同時に、在庫データに簡単にアクセスして変更できます。

interface User {
  id: number;
  name: string;
  email?: string;
}

const userWithoutEmail: Omit<user> = {
  id: 1,
  name: 'Bob',
};

</user>

除外する

Exclude** ユーティリティ タイプは、共用体から特定の型を除外することによって型を構築します。

特定のプリミティブ型 (文字列ではなく数値やブール値など) のみを受け入れる関数を設計する場合は、Exclude を使用できます。これにより、予期しない型によって実行中にエラーが発生する可能性があるバグを防ぐことができます。

次のコード例を参照してください。

type Fruit = 'apple' | 'banana' | 'orange';
type Inventory = Record<fruit number>;

const inventory: Inventory = {
  apple: 10,
  banana: 5,
  orange: 0,
};

</fruit>

抽出する

Extract ユーティリティ型は、共用体から特定の型を抽出して型を構築します。

混合型のコレクションから数値のみを処理する必要があるシナリオ (計算の実行など) では、Extract を使用すると、数値のみが確実に渡されます。これは、厳密な型指定により実行時エラーを防ぐことができるデータ処理パイプラインで役立ちます。

次のコード例を参照してください。

interface User {
  id: number;
  name: string;
  email?: string;
}

const updateUser = (user: Partial<user>) => {
  console.log(Updating user: ${user.name} );
};

updateUser({ name: 'Alice' });

</user>

Null 不可

NonNullable ユーティリティ型は、指定された型から null未定義 を除外して型を構築します。

ユーザー名や製品 ID など、一部の値を常に定義する必要があるアプリでは、値を NonNullable にすると、そのようなキー フィールドが null や 未定義。これは、フォームの検証中や、値の欠落によって問題が発生する可能性がある API からの応答中に役立ちます。

次のコード例を参照してください。


interface Car {
  make: string;
  model: string;
  mileage?: number;
}

const myCar: Required<car> = {
  make: 'Ford',
  model: 'Focus',
  mileage: 12000,
};

</car>
戻り値の型

ReturnType ユーティリティは、関数の戻り値の型を抽出します。

座標などの複雑なオブジェクトを返す高階関数またはコールバックを操作する場合、

ReturnType を使用すると、毎回手動で指定する必要がなく、予想される戻り値の型の定義が簡素化されます。これにより、型の不一致に関連するバグが減り、開発がスピードアップします。

interface Config {
  apiEndpoint: string;
}

const config: Readonly<config> = { apiEndpoint: 'https://api.example.com' };

// config.apiEndpoint = 'https://another-url.com'; // Error: Cannot assign to 'apiEndpoint'

</config>
パラメータ

パラメータ ユーティリティは、関数のパラメータの型をタプルとして抽出します。

これにより、関数の周囲にラッパーを作成する場合など、関数パラメーターを動的に操作または検証したい場合に、パラメーターの型を簡単に抽出して再利用できます。関数シグネチャの一貫性を確保することで、コードベース全体でのコードの再利用性と保守性が大幅に向上します。

次のコード例を参照してください。


interface User {
  id: number;
  name: string;
  email: string;
}

type UserSummary = Pick<user>;

const userSummary: UserSummary = {
  name: 'Alice',
  email: 'alice@example.com',
};

</user>
ユーティリティタイプを組み合わせた高度なユースケース

これらのユーティリティ タイプを組み合わせると、TypeScript でアプリを開発するときに強力な結果が得られます。複数のユーティリティ タイプが効果的に連携するいくつかのシナリオを見てみましょう。

部分と必須の組み合わせ

特定のフィールドを必要とする型を作成し、他のフィールドをオプションにすることができます。


interface User {
  id: number;
  name: string;
  email?: string;
}

const userWithoutEmail: Omit<user> = {
  id: 1,
  name: 'Bob',
};

</user>
この例では、

UpdateUser には id プロパティが必要ですが、名前と電子メールはオプションです。このパターンは、識別子が常に存在する必要があるレコードを更新する場合に役立ちます。

柔軟な API レスポンスの作成

特定の条件に基づいてさまざまな形状を持つことができる API 応答を定義することができます。


type Fruit = 'apple' | 'banana' | 'orange';
type Inventory = Record<fruit number>;

const inventory: Inventory = {
  apple: 10,
  banana: 5,
  orange: 0,
};

</fruit>
ここで、

ApiResponse を使用すると、API 呼び出しに対する柔軟な応答タイプを作成できます。 Pick を使用すると、関連するユーザー データのみが応答に含まれるようになります。

フィルタリングタイプとして除外と抽出を組み合わせる

特定の基準に基づいてユニオンから特定の型をフィルタリングする必要がある状況が発生する場合があります。

次のコード例を参照してください。

interface User {
  id: number;
  name: string;
  email?: string;
}

const updateUser = (user: Partial<user>) => {
  console.log(Updating user: ${user.name} );
};

updateUser({ name: 'Alice' });

</user>

ここでは、Exclude ユーティリティを使用して、元の ResponseTypes 共用体から loading を除外する型 ( NonLoadingResponses ) を作成します。 handleResponse 関数が受け入れのみを許可する有効な入力として 成功 または エラー を入力します。

ベストプラクティス

必要な場合のみ使用する

ユーティリティ型は非常に強力ですが、使いすぎるとコードが複雑で読みにくくなる可能性があります。これらのユーティリティの活用とコードの明瞭性の維持との間でバランスを取ることが重要です。

次のコード例を参照してください。

interface Car {
  make: string;
  model: string;
  mileage?: number;
}

const myCar: Required<car> = {
  make: 'Ford',
  model: 'Focus',
  mileage: 12000,
};

</car>

明瞭さを維持する

各ユーティリティのユースケースの目的が明確であることを確認してください。あまりにも多くのユーティリティを一緒にネストしないでください。型の意図した構造が混乱する可能性があります。

次のコード例を参照してください。

interface Config {
  apiEndpoint: string;
}

const config: Readonly<config> = { apiEndpoint: 'https://api.example.com' };

// config.apiEndpoint = 'https://another-url.com'; // Error: Cannot assign to 'apiEndpoint'

</config>

パフォーマンスに関する考慮事項

TypeScript 型はコンパイル後に消えるため、実行時にパフォーマンスに影響することはほとんどありませんが、複雑な型は TypeScript コンパイラーの速度を低下させ、開発速度に影響を与える可能性があります。

interface User {
  id: number;
  name: string;
  email: string;
}

type UserSummary = Pick<user>;

const userSummary: UserSummary = {
  name: 'Alice',
  email: 'alice@example.com',
};

</user>

結論

TypeScript が Web 開発者の間で最も人気のある言語の 1 つであることは疑いの余地がありません。ユーティリティ タイプは、正しく使用すると TypeScript の開発エクスペリエンスとコードの品質を大幅に向上させる、TypeScript のユニークな機能の 1 つです。ただし、パフォーマンスとコードの保守性の問題が発生する可能性があるため、すべてのシナリオでこれらを使用するべきではありません。

関連ブログ

  • JavaScript および TypeScript のトップ リンター: コード品質管理の簡素化
  • すべての開発者が知っておくべき 7 つの JavaScript 単体テスト フレームワーク
  • TypeScript での感嘆符の使用
  • TypeScript の条件型を理解する

以上がTypeScript ユーティリティの種類: 完全ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、