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 のプロジェクト例

推薦する

MySQL の重要なパフォーマンス インデックスの計算と最適化方法の概要

1 QPS 計算 (1 秒あたりのクエリ数) MyISAMエンジンベースのDBの場合 MySQL&g...

nginx-naxsi ホワイトリストルールの詳細な説明

ホワイトリストルールの構文:基本ルール wl:ID [否定] [mz:[$URL:target_ur...

JavaScript における一般的な配列操作

目次1. 連結() 2. 結合() 3. プッシュ() 5. シフト() 6. シフト解除() 7....

JavaScript の絶妙なスネーク実装プロセス

目次1. HTML構造を作成する2. テーブルを作成する3. ヘビの頭と体を作る4. 食べ物を作る5...

CSS 複数 3 列適応レイアウト実装の詳細な説明

序文従来のWEBレイアウトに沿うため、すべてヘッダーとフッターモードの左・中央・右レイアウトで書かれ...

Vueコンポーネントの7つの通信方法についての深い理解

目次1. props/$emit導入コードサンプル2.Vスロット導入コードサンプル3.$refs/ ...

Dockerイメージをプルしてバージョンを確認する方法

イメージのバージョンとタグを確認するには、docker hubで確認する必要があります。アドレスは次...

Linux で Hadoop クラスターをインストールするための詳細な手順

目次1. usrディレクトリにHadoopディレクトリを作成し、インストールパッケージをそのディレク...

Vueでブラウザ共有機能を呼び出す方法

序文Vue(発音は /vjuː/、view に似ています)は、ユーザーインターフェイスを構築するため...

HTML サブタグと sup タグ

今日はあまり使わないHTMLタグ「subタグ」と「supタグ」を紹介します。定義と使用法: <...

Windows ベースの MySQL 8.0.12 のインストール

このチュートリアルは Windows システムにのみ適用されます。インストールしたがまだインストール...

dns-prefetch とは何ですか? フロントエンドの最適化: DNS の事前解決によりページ速度が向上します

目次背景1. dns-prefetch とは何ですか? 2. dns-prefetch を設定するに...

Vue+element ui はアンカーの配置を実現します

この記事では、アンカー配置を実現するためのVue +要素UIの具体的なコードを例として紹介します。具...

Vue Routerはバックグラウンドデータに応じて異なるコンポーネントをロードします

目次実際のプロジェクトで遭遇する要件実装が間違っているところもある私は個人的に、実装するより良い方法...

詳細なアイデアを備えたシンプルな計算機の HTML 実装

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...