TypeScript 1.8で関数の戻り値の型を取得する方法
TypeScriptで関数の戻り値の型を取得する方法
ReturnType 型を使用する
TypeScript 2.8以降では、ReturnType
型を使用して、関数の戻り値の型を取得することができます。
function add(x: number, y: number): number {
return x + y;
}
const addReturnType = ReturnType<typeof add>; // number
// addReturnType は number 型である
const result = add(1, 2);
console.log(result); // 3
ReturnType
型は、ジェネリック型であり、関数型を受け取り、その関数の戻り値の型を返します。
typeof
演算子を使用して、関数の型を取得し、その型の return
プロパティにアクセスすることで、戻り値の型を取得することができます。
function add(x: number, y: number): number {
return x + y;
}
const addType = typeof add;
const addReturnType = addType["return"]; // number
// addReturnType は number 型である
const result = add(1, 2);
console.log(result); // 3
typeof
演算子は、変数や式の型を取得します。 関数の場合、取得される型には return
プロパティがあり、そのプロパティの型が関数の戻り値の型となります。
上記以外にも、以下の方法で関数の戻り値の型を取得することができます。
- 関数定義時に戻り値の型を明示的に指定する
- 関数リテラルを使用する
as
キーワードを使用する
これらの方法は、ReturnType
型や typeof
演算子を使用するよりも冗長になる場合がありますが、状況によっては有効な場合があります。
TypeScriptで関数の戻り値の型を取得するには、いくつかの方法があります。 それぞれの方法にはメリットとデメリットがあり、状況によって使い分けることが重要です。
補足
- 上記のコードは、TypeScript 1.8 でも動作します。
- TypeScript 1.8 では、
ReturnType
型は存在しないため、typeof
演算子を使用する必要があります。
// 関数定義時に戻り値の型を明示的に指定する
function add(x: number, y: number): number {
return x + y;
}
// 関数リテラルを使用する
const add = (x: number, y: number): number => {
return x + y;
};
// `as` キーワードを使用する
const add = (x: number, y: number) => x + y;
const result = add(1, 2) as number;
console.log(result); // 3
関数の戻り値の型を取得するその他の方法
ジェネリック型を使用して、関数の戻り値の型を型パラメータとして受け取ることができます。
function add<T>(x: T, y: T): T {
return x + y;
}
const addNumber = add(1, 2); // number
const addString = add("a", "b"); // string
上記の例では、add
関数はジェネリック型 T
を受け取り、T
型の引数を2つ受け取って T
型の値を返します。
infer キーワードを使用する
function add(x: number, y: number): number {
return x + y;
}
const addReturnType = infer R => add(1, 2); // number
// addReturnType は number 型である
const result = add(1, 2);
console.log(result); // 3
上記の例では、infer
キーワードを使用して、add
関数の戻り値の型を R
という型変数に推論しています。
型ガードを使用して、関数の戻り値の型を絞り込むことができます。
function add(x: number | string, y: number | string): number | string {
if (typeof x === "number" && typeof y === "number") {
return x + y;
} else {
return x + " " + y;
}
}
const result = add(1, 2); // number
if (typeof result === "number") {
console.log(result); // 3
} else {
console.log(result); // "1 2"
}
上記の例では、add
関数は number
型または string
型の引数を2つ受け取って number
型または string
型の値を返します。 型ガードを使用して、戻り値の型が number
型であるかどうかを判断しています。
typescript typescript1.8