高度なTypeScriptユーティリティタイプが説明されています
TypeScriptのユーティリティタイプは、既存のタイプを操作して清潔で再利用可能な方法で変換できる強力なツールです。 Partial<t></t>
やReadonly<t></t>
などの基本的なものは広く知られていますが、TypeScriptは、洗練されたタイププログラミングのロックを解除するより高度なユーティリティタイプも提供します。最も便利な高度なユーティリティタイプ、つまり彼らが何をするか、どのように働くか、いつ使用するかに飛び込みましょう。

1。 Pick<t k></t>
およびOmit<t k></t>
- 選択型変換
これら2つは、特定のプロパティを選択または除外することにより、新しいタイプを作成するために不可欠です。
-
Pick<t k></t>
:型T
のK
にリストされているプロパティのみを備えた型。インターフェイスユーザー{ ID:番号; 名前:文字列; 電子メール:文字列; 年齢:数; } タイプuserPreview = pick <user、 'id' | 「名前」>; // {id:number;名前:文字列; }
API応答またはフォーム入力のために、フィールドのサブセットを抽出したい場合に役立ちます。
Omit<T, K>
:Pick
の反対。K
のキーをT
から削除します。type publicuser = omit <user、 'email' | 「年齢」>; // {id:number;名前:文字列; }
公共のインターフェイスに敏感または内部のフィールドを隠すのに最適です。
?ヒント:コンポーネントまたは小道具インターフェイスを拡張しているが、特定の継承された小道具を除外したい場合は
Omit<T, K>
特に便利です。
2。 Extract<T, U>
し、 Exclude<T, U>
これらのユーティリティは、組合タイプで動作し、割り当てに基づいてメンバーを除外できます。
Exclude<T, U>
:T
U
割り当てられた任意のタイプから削除します。タイプステータス= 'ロード' | 「成功」| 「エラー」| 404; type stringstatus = exclude <status、number>; // 'ロード' | 「成功」| 'エラー'
一般に、組合から不要な種類を剥ぎ取るために使用されます。EG、
null
またはundefined
除去。Extract<T, U>
:U
に割り当てられたT
の部分のみを保持します。type numbersonly = extract <status、number>; // 402
混合組合から特定の種類の価値を分離したい場合に便利です。
これらは、フードの下で条件付きタイプを使用して構築されています。
タイプ除外<t、u> = tはuを拡張しますか?決して:t; 抽出<t、u> = tはuを拡張しますか? T:決して;
3。 Record<K, T>
- 柔軟なキー価値マッピング
タイプK
のキーとタイプT
の値を持つオブジェクトタイプを作成します。
タイプroutes = 'home' | 'about' | '接触'; constページ:録音<routes、string> = { 家: '/'、 概要: '/about'、 連絡先:「/連絡先」、 };
構成または状態のマッピングにも役立ちます。
型configmap = record <string、{enabled:boolean;タイムアウト:番号}>;
⚠⚠️K
K
string | number | symbol
、または文字通りタイプの結合。複雑なオブジェクトをキーとして使用することはできません。
4。 Parameters<T>
およびReturnType<T>
- 関数の署名導入
これらは、関数の署名からタイプを直接抽出することができます。
Parameters<T>
:関数のパラメータータイプのタプルを生成します。関数createUser(name:string、age:number):void {} type createargs = parameters <typeof createUser>; // [名前:文字列、年齢:番号]
高次関数やラッパーに非常に便利です:
機能<f extends(... args:any [])=> any>( fn:f、 ロガー:(... args:any [])=> void ):(... args:parameters <f>)=> returnType <f> { return(... args)=> { logger( 'with:'、args)の呼び出し); fn(... args)を返す; }; }
ReturnType<T>
:関数の戻りタイプを抽出します。タイプapiresponse = returnType <()=> {data:any;ステータス:番号}>; // {データ:any;ステータス:番号}
構造を複製せずに関数の出力に基づいて変数を入力する場合によく使用されます。
5。NONNULLABLE NonNullable<T>
- null
を削除してundefined
null
とタイプからundefined
ストリップ。
タイプmaybestring = string | null |未定義; タイプempulationString = nonullable <MayBestring>; // 弦
これは、Nullableタイプを返すAPIまたはDOMメソッドを操作する場合に特に役立ち、すでに存在をチェックしています。
フードの下:
NONULLABLE <T> = Tはnull |を拡張します未定義 ?決して:t;
6. Required<T>
およびPartial<T>
- オプションのプロパティの処理
Partial<T>
はよく知られていますが、 Required<T>
は特定の場合にも同様に役立ちます。
-
Partial<T>
:すべてのプロパティをオプションにします。 -
Required<T>
:必要なすべてのプロパティを作成します。
インターフェイスフォームフィールド{ ラベル?:文字列; 値?:文字列; 触れましたか?:boolean; } タイプCompleteField =必須<Forfield>; //すべてのフィールドが必要になりました
オブジェクトにすべてのプロパティが埋め込まれていることを強制するときにRequired
使用(例:提出または検証の前)。
7。ThisType ThisType<T>
- 高度なコンテキストタイピング(まれですが強力)
ThisType
タイプを変換しません。 this
がオブジェクト内にあるべきものをTypeScriptに伝えます。
typeMyobj = { sayhello():string; getname():string; }&thisType <{getName():string;年齢:番号}>; const obj:myobj = { sayhello(){ `hello、$ {this.getName()}を返します!あなたは$ {this.age} `; //✅ `これは「年齢」と「getName」について知っています }、 getName(){ 「匿名」を返します。 }、 }; obj.sayhello();
これには、
--noImplicitThis
が必要であり、通常、フレームワークの設計または流fluent APIで使用されます。
ボーナス:カスタムユーティリティタイプパターン
これらを組み合わせて、独自の高度なユーティリティを作成できます。
Prettify<T>
- エラーメッセージでネストされたインタラクションタイプをクリーンアップします。Type Prettify <t> = { }&{};
Merge<T, U>
- 2つのタイプをU
T
組み合わせます。タイプマージ<t、u> = omit <t、keyof u>&u;
構成のオーバーライドまたはテーマ拡張機能に役立ちます。
これらの高度なユーティリティタイプは、タイプスクリプトプロジェクトが複雑になるにつれて不可欠になります。それらは、それらを複製するのではなく、タイプを再利用および変換することにより、より安全で維持されたコードを書くのに役立ちます。
基本的に、 Pick
、 Omit
、 Parameters
、およびReturnType
の組み合わせを開始すると、タイプに注目を集めなくなりました。
以上が高度なTypeScriptユーティリティタイプが説明されていますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

rel = "styleSheet" linkscssfilesforstylingthepage; 2.Rel = "preoad" hintstopreloadcriticalResourcesforPerformance; 3.REL = "ICON" setSthewebsite’sfavicon;

thetargetattributeinanhtmlanchortagswheretoopenthelinkeddocument.1._ selfopensthelinkinthesametab(デフォルト).2._blankpensthelinkinewtaborwindow.3.__parentopensthelinkinkintheparentframe.4._topensthelinkinthefuntowdowing

agoodcustomhookinReactisareusableFunctionStartingは、「使用」を「使用」しています

cssgradientsprovidesmoothcolortransitionswithoutimages.1.Linear GradientsColorSalOrsalOrsArtaightlineSingDirectionSlikotobottOMORANGLESLIKE45DEG、ANDSUPPORTMULTIPRECOLORSTOPSFORCHLEXEFFECTS.2

Thetagisusedtomarkdeletedtext,optionallywithdatetimeandciteattributestospecifywhenandwhythedeletionoccurred.2.Thetagindicatesinsertedcontent,alsosupportingdatetimeandciteforcontextabouttheaddition.3.Thesetagscanbecombinedtoshowdocumentrevisionsclearl

はい、ContentEditable属性を使用して、HTML要素を編集可能にすることができます。特定の方法は、ターゲット要素にContentEditable = "true"を追加することです。たとえば、このテキストを編集でき、ユーザーはコンテンツを直接クリックして変更できます。この属性は、Div、P、Span、H1からH6などのブロックレベルおよびインライン要素に適しています。デフォルトの値は、編集可能である「真」、「false」ではなく、編集不可能であり、親要素の設定を継承する「継承」です。アクセシビリティを改善するために、tabindex = "0&quoを追加することをお勧めします

純粋なCSSを備えた応答性のある自動カルーセルスライダーを作成し、HTML構造、フレックスボックスレイアウト、およびCSSアニメーションを組み合わせただけです。 2.最初に、複数の推奨項を含むセマンティックHTMLコンテナを構築します。各.ITEMには、参照コンテンツと著者情報が含まれています。 3.親コンテナを使用して表示:Flex、幅:300%(3つのスライド)を設定し、オーバーフローを適用します:隠して水平方向の配置を達成します。 4. @KeyFramesを使用して、0%から-100%へのtransThex変換を定義し、アニメーションを組み合わせてScroll15SlinearInfiniteを組み合わせて、シームレスな自動スクロールを実現します。 5.メディアを追加します

CSSセレクターを使用する場合、最初に低分野のセレクターを使用して、過度の制限を回避する必要があります。 1.特異性レベルを理解し、タイプ、クラス、およびIDの順序で合理的に使用します。 2.多目的クラス名を使用して、再利用性と保守性を向上させます。 3.属性と擬似クラスセレクターを使用して、パフォーマンスの問題を回避します。 4.セレクターを短くて明確な範囲に保ちます。 5. BEMおよびその他の命名仕様を使用して、構造的な明確さを改善します。 6.タグセレクターの悪用を避け、次のことを避け、nth-child、およびスタイルが長い間制御可能であることを確認するために、ツールクラスまたはモジュラーCSSの使用を優先します。
