TypeScript インターフェースの紹介

TypeScript インターフェースの紹介

序文:

TS の基本原則の 1 つは、構造の型チェックを行うことです。インターフェイスの目的は、これらの型に名前を付け、コードまたはサードパーティのコードのコントラクトを定義することです。

最終的にJavaScriptコードにコンパイルされるコードには、インターフェースと型制約は含まれません。

1. インターフェース定義

インターフェースの役割はtypeキーワードに似ていますが、異なります。型は次のコードのように単純なデータ型を定義できます。

タイプ str = 文字列


この記述方法は、関数型、クラス型、配列型のみを記述できるインターフェースには適用できません。

interfaceキーワードは、TS でインターフェースを定義するために使用されます。

サンプルコードは次のとおりです。

// シンプルなインターフェースを定義する interface Person {
  名前: 文字列
}
//getメソッドを定義する function getPersonName(person: Person): void {
  console.log(人.名前)
}
// setメソッドを定義する function setPersonName(person: Person, name: string): void {
  person.name = 名前
}
// personオブジェクトを定義する let person = {
  名前: 「お粥一杯」
}
setPersonName(人、'イーワン・ゾウ')
// 変更成功 getPersonName(person) // Yiwan Zhou

Personインターフェースは、インターフェースを使用するための要件を記述するために使用される名前のようなものです。たとえば、このインターフェースにはname属性が必要であり、その型は文字列です。

型チェックではプロパティの順序はチェックされず、対応するプロパティが存在し、同じ型であることのみが要求されることに注意してください。

2. 属性

2.1 オプション属性

インターフェース内のプロパティがオプションであるか、特定の条件下でのみ存在する場合は、プロパティ名の横に ? 記号を追加できます。サンプルコードは次のとおりです。

;(関数 () {
  // シンプルなインターフェースを定義する interface Person {
    名前: 文字列
    // 年齢はオプションであることを示します age?: number
  }
  // personオブジェクトを定義する let person = {
    名前:「周の一杯」
    年齢: 18歳
    趣味:「コーディング」
  }
  //getメソッドを定義する function getPersonName(person: Person): void {
    // console.log(person.age, person.hobby) // プロパティ 'hobby' はタイプ 'Person' に存在しません。
  }
})()

この時点では、 sex属性を記述しても記述しなくてもかまいませんが、 hobb属性はインターフェースで定義されていないため、呼び出すと例外がスローされます。

2.2 読み取り専用プロパティ

プロパティを読み取り専用プロパティにしたい場合は、プロパティの前にreadonly追加するだけです。

サンプルコードは次のとおりです。

;(関数 () {
  インターフェース Person {
    // 名前を読み取り専用に設定する readonly name: 文字列
  }
  // personオブジェクトを定義する let person = {
    名前:「周の一杯」
  }
  // setメソッドを定義する function setPersonName(person: Person, name: string): void {
    person.name = name // 'name' は読み取り専用プロパティであるため、割り当てることはできません。
  }
  setPersonName(人、'お粥一杯')
})()

3. クラスタイプ

3.1 継承インターフェース

クラスと同様に、インターフェースも相互に継承できます。 これにより、あるインターフェースから別のインターフェースにメンバーをコピーできるようになり、インターフェースを再利用可能なモジュールに分割する際の柔軟性が向上します。

インターフェースの継承では extends キーワードを使用します。サンプル コードは次のとおりです。

// 2つのインターフェースを定義する interface PersonName {
  名前: 文字列
}
インターフェース PersonAge {
  年齢: 番号
}

// 上記の 2 つのインターフェースを継承する Person インターフェースを定義します。複数のインターフェースを使用する場合は、カンマで区切ります。interface Person extends PersonName, PersonAge {
  趣味: 弦楽器
  // 戻り値が文字列であるメソッドを定義する
  say(): 文字列
}
人 = {
  名前:「周の一杯」
  年齢: 18歳
  趣味:「コーディング」
  // サンプルメソッド say() {
    「一碗の周」を返す
  },
}
//getメソッドを定義する function getPersonName(person: Person): void {
  console.log(人名、年齢、趣味)
}
getPersonName(person) // Yiwan Zhou 18 コーディング

複数のインターフェースを継承する場合に、カンマで区切って使用します。

4. 関数の種類

TS では、インターフェースは関数型のインターフェースも記述できます。

関数型インターフェースの定義は、パラメータ リストと戻り値の型のみを持つ関数定義に似ています。パラメータ リスト内の各パラメータには、名前と型が必要です。

サンプルコードは次のとおりです。

インターフェースMyAdd{
    (x: 数値、y: 数値): 数値
}


定義が完了すると、この関数インターフェースを通常のインターフェースのように使用できるようになります。

サンプルコードは次のとおりです。

myAdd: MyAdd = (x: 数値, y: 数値): 数値 => {
    x + yを返す
}


上記のコードは、次の関数定義と同等です。

myAdd: (x: 数値、y: 数値) => 数値 = (
    x: 数値、
    y: 数値
): 数値 => {
    x + yを返す
}

TypeScriptインターフェースに関するこの記事はこれで終わりです。TypeScript インターフェースに関するその他の関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • TypeScript のジェネリック使用法とジェネリックインターフェースの組み合わせ
  • TypeScript 入門 - インターフェース
  • TypeScriptのインターフェースの詳細な説明
  • TypeScript ジェネリックを簡単に説明する方法
  • TypeScript ジェネリックパラメータのデフォルト型と新しい厳密なコンパイルオプション
  • フロントエンドにおけるTypescriptの一般的な概念の深い理解
  • TypeScript のインターフェースとジェネリックを理解していますか?

<<:  CSS の :focus-within の楽しさについて簡単に説明します

>>:  CSS--overflow:hidden のプロジェクト例

推薦する

Linux Dig コマンドの使用法

発掘紹介: Dig は、Unix ライクなコマンドライン モードで NS レコード、A レコード、M...

Docker コンテナのタイムゾーン エラーの問題

目次背景質問問題分析と解決策新たな問題問題分析と解決策背景node-schedule スケジュール ...

Vue3.0 は虫眼鏡効果のケーススタディを実装します

達成される効果は、固定ズームが 2 倍になり、マウスが左側の画像領域に入るとマスク レイヤーが表示さ...

Centos7のシステム言語を簡体字中国語に変更する方法

例示するシステムを自分でインストールする場合は、通常、システム言語をカスタマイズできます。ただし、ク...

JavaScript配列の一般的なメソッドの詳細な説明

目次一般的な配列メソッドポップ()シフト解除()シフト()スライス()スプライス()配列から重複した...

MySQL 5.7.17 圧縮バージョンのインストールノート

この記事では、参考までにMySQL 5.7.17圧縮版のインストール手順を紹介します。具体的な内容は...

MySQLでconcat関数を使用する方法

以下のように表示されます。 //managefee_managefee テーブルの年と月を照会し、c...

Linux 環境に mysql5.7.36 データベースをインストールするチュートリアル

ダウンロードアドレス: https://dev.mysql.com/downloads/mysql/...

Vue 父子価値移転、兄弟価値移転、子父価値移転の詳細な説明

目次1. 親コンポーネントが子コンポーネントに値を渡す1. 親コンポーネント.vue 2. サブコン...

CSSインジェクションの知識の要約

最近のブラウザでは、CSS 内で JavaScript を実行することはできなくなりました。以前は、...

JavaScript関数の使い方の詳細な説明

目次1. 関数を宣言する2. 関数の呼び出し3. 関数パラメータ4. 関数の戻り値5. 議論の使用6...

Dockerの動作モードと原理の詳細な説明

次の図に示すように: 仮想マシンと Docker を使用するとき、「なぜ Docker は VM よ...

HTML で div を非表示にする テーブルを非表示にする TABLE または DIV コンテンツの CSS スタイル

今夜、数日間悩まされていた問題を解決しました。本当に解決したかどうかはわかりませんが、解決されている...

ウェブデザイナー職の面接でよくある質問と回答

1. ASP.NET Web アプリケーションのテンプレートとは何ですか? それらの違いは何ですか?...

タグのターゲットリンクを iframe に向ける方法

コードをコピーコードは次のとおりです。 <iframe id="myFrameId&...