0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TypeScriptのジェネリクス

Posted at

<>はTypeScriptにおけるジェネリクスの型パラメータを定義するための記号です。この記号を使って、関数やクラス、インターフェースが柔軟に異なる型を扱えるようにします。

ジェネリクス関数の例

function identity<T>(arg: T): T {
  return arg;
}

const result1 = identity<number>(10);  // Tがnumberとして扱われる
const result2 = identity<string>("hello");  // Tがstringとして扱われる
  • identity<T>: Tは型パラメータで、実際の型が渡されるまでのプレースホルダーです。
  • identity<number>(10): 呼び出し時に具体的な型を指定しています。

ジェネリクスの利点

  • 型安全性: 型を明示することで、コンパイル時に型チェックが行われます。
  • 再利用性: 同じロジックを異なる型に対して適用できます。

<>はこのように型を抽象化し、柔軟に扱うための重要な構文です。

文法

ジェネリクスは、関数、クラス、インターフェース、型エイリアスで使用できます。通常、山括弧 <> を使って定義します。

関数での使用

function identity<T>(arg: T): T {
  return arg;
}

const result1 = identity<number>(10);
const result2 = identity<string>("hello");
  • Tは型パラメータで、実際の型が渡されるまで待つプレースホルダーです。
  • 関数を呼び出すときに具体的な型を指定します。

クラスでの使用

class Box<T> {
  contents: T;
  constructor(value: T) {
    this.contents = value;
  }
}

const numberBox = new Box<number>(123);
const stringBox = new Box<string>("test");
  • クラスのインスタンス化時に型を指定します。

インターフェースでの使用

interface Pair<T, U> {
  first: T;
  second: U;
}

const pair: Pair<number, string> = { first: 1, second: "apple" };
  • 型を複数指定することも可能です。

典型的な使用例

配列操作

function getArray<T>(items: T[]): T[] {
  return new Array<T>().concat(items);
}

const numberArray = getArray<number>([1, 2, 3]);
const stringArray = getArray<string>(["a", "b", "c"]);
  • 任意の型の配列を操作する関数を作成できます。

制約付きジェネリクス

interface Lengthwise {
  length: number;
}

function logLength<T extends Lengthwise>(arg: T): T {
  console.log(arg.length);
  return arg;
}

logLength("hello"); // OK
// logLength(123); // エラー: number型にはlengthプロパティがありません
  • T extends Lengthwiseにより、Tlengthプロパティを持つ型でなければならないという制約を設けています。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?