関数リテラルだけじゃない!TypeScriptで矢印関数の型を指定する4つの方法

2024-04-02

TypeScript の矢印関数で戻り値の型を指定する方法

概要

  1. 関数リテラルの後に => 演算子と戻り値の型を記述する
  2. as キーワードを使って型エイリアスを定義する

関数リテラルの後に => 演算子と戻り値の型を記述する

この方法は、最も簡潔で一般的な方法です。以下の例のように、関数リテラルの後に => 演算子と戻り値の型を記述します。

const add = (x: number, y: number): number => {
  return x + y;
};

上記の例では、add 関数は 2 つの数値を受け取り、その合計値を返す関数です。=> 演算子の後に number 型を記述することで、add 関数の戻り値が数値であることを明示しています。

as キーワードを使って型エイリアスを定義する

この方法は、複数の場所で同じ型を使用する場合に便利です。以下の例のように、as キーワードを使って型エイリアスを定義します。

type Adder = (x: number, y: number) => number;

const add: Adder = (x, y) => {
  return x + y;
};

上記の例では、Adder という名前の型エイリアスを定義し、number 型を受け取り、number 型を返す関数を表す型としています。その後、add 関数は Adder 型の変数として宣言されています。

  • 簡潔さを求める場合は、1. の方法を使うのがおすすめです。
  • 戻り値の型が void の場合は、=> void と記述します。



関数リテラルの後に => 演算子と戻り値の型を記述する

// 数値の配列を受け取り、その合計値を返す関数
const sum = (numbers: number[]): number => {
  return numbers.reduce((a, b) => a + b, 0);
};

// 文字列の配列を受け取り、その要素を結合して返す関数
const join = (strings: string[]): string => {
  return strings.join(", ");
};

// オブジェクトを受け取り、そのプロパティの値を返す関数
const getProp = <T, K extends keyof T>(obj: T, prop: K): T[K] => {
  return obj[prop];
};

// 上記の関数の使用例
const numbers = [1, 2, 3, 4, 5];
const sumResult = sum(numbers); // 15

const strings = ["Hello", "World"];
const joinResult = join(strings); // "Hello, World"

const obj = { name: "John", age: 30 };
const name = getProp(obj, "name"); // "John"

as キーワードを使って型エイリアスを定義する

// 数値の配列を受け取り、その合計値を返す関数の型エイリアス
type Sum = (numbers: number[]) => number;

// 文字列の配列を受け取り、その要素を結合して返す関数の型エイリアス
type Join = (strings: string[]) => string;

// オブジェクトを受け取り、そのプロパティの値を返す関数の型エイリアス
type GetProp<T, K extends keyof T> = (obj: T, prop: K) => T[K];

// 上記の型エイリアスを使った関数の定義
const sum: Sum = (numbers) => {
  return numbers.reduce((a, b) => a + b, 0);
};

const join: Join = (strings) => {
  return strings.join(", ");
};

const getProp: GetProp<any, any> = (obj, prop) => {
  return obj[prop];
};

// 上記の関数の使用例
const numbers = [1, 2, 3, 4, 5];
const sumResult = sum(numbers); // 15

const strings = ["Hello", "World"];
const joinResult = join(strings); // "Hello, World"

const obj = { name: "John", age: 30 };
const name = getProp(obj, "name"); // "John"



TypeScript の矢印関数で戻り値の型を指定するその他の方法

関数宣言を使う

function add(x: number, y: number): number {
  return x + y;
}

上記の例では、add 関数を関数宣言を使って定義しています。関数宣言では、戻り値の型を関数名の前に記述します。

interface を使う

interface Adder {
  (x: number, y: number): number;
}

const add: Adder = (x, y) => {
  return x + y;
};

type キーワードを使う

type Adder = (x: number, y: number) => number;

const add: Adder = (x, y) => {
  return x + y;
};
  • 複数の場所で同じ型を使用する場合は、interface または type キーワードを使って型エイリアスを定義するのがおすすめです。

typescript


非TypeScriptライブラリも安心!TypeScriptでrequire.jsを使って外部ライブラリを読み込む

前提知識このチュートリアルを理解するには、以下の知識が必要です。TypeScript の基本的な構文require. js の基本的な使い方手順型宣言ファイルの作成ライブラリで使用される変数、関数、クラスなどの型を宣言する必要があります。 これを行うには、.d.ts ファイルを作成します。 ファイル名はお好みで構いませんが、一般的にはライブラリ名にちなんだ名前が付けられます。例:ライブラリ名が external-lib の場合、型宣言ファイル名は external-lib...


ReactJSとTypeScriptでrefsを使いこなして開発を効率化

まず、useRefフックを使って、refという変数を初期化します。このコードは、refという変数をHTMLInputElement型で初期化しています。これは、refが常にHTMLInputElement型の値を参照することを保証します。次に、ref変数をDOM要素に渡します。...


ターゲット JavaScript バージョンを ES6 以上に設定する

TypeScript コードで includes メソッドを使用しようとした際に、"Property 'includes' does not exist on type 'string[]'" というエラーが発生することがあります。これは、TypeScript が静的型付けを採用しているため、includes メソッドが string[] 型に定義されていないことを検知し、エラーとして報告しているためです。...


discriminated unionで異なるフォーマットの日付を扱う

TypeScriptで日付を扱う場合、いくつかの方法があります。Date型を使う最も一般的な方法は、Date型を使うことです。Date型は、年、月、日、時、分、秒などの情報を含むオブジェクトです。Date型の利点と欠点利点: 使いやすい利点:...