← Back

【TypeScript】型の定義について基礎をまとめました【12種類の型を紹介!】

2023年1月26日eyecatch

この記事では、TypeScriptの型についてまとめてみました。

TypeScriptは型が付いたJavaScriptを拡張した言語です。

TypeScriptはコンパイラしたときにJavaScriptに変換されます。

プログラミングにおいて型の恩恵は大きく、型を定義することで、予期せぬエラーを未然に防ぐことができます。

この記事が少しでも参考になれば幸いです。

前提知識

①TypeScriptでは型の定義を小文字で定義します。

Stringではなくstringなので注意しましょう。

②JavaScriptに備わっているデータ型はTypeScriptでサポートされています。

  • number
  • string
  • boolean
  • object
  • Array


上記以外にも以下の型がサポートされています。

  • Tuple
  • Enum
  • any
  • Union
  • Literal
  • 型エイリアス カスタム型
  • unkown
  • void
  • function
  • never


引数の型 基本的な使い方

①TypeScriptでは型の定義を引数で使用します。

function calc(n1:number, n2:number){
  return n1 + n2;
}
// 引数n1,n2はnumber型で定義されています
// number以外の型が渡るとエラーになります


注意が必要なのは、TypeScriptの定義と異なる型が渡っても、コンパイラは通常どおり実行されることです。

TypeScriptはあくまでコードの動作は変えずに、誤ったコードのチェックを行う言語です。

ブラウザでエラーチェックをする必要が無く、誤ったコードに素早く気づくことができます。


②変数や定数には基本的に型を定義しません。

TypeScriptには型推論という機能があります。

型推論でTypeScriptが自動で型を判別してくれます。

型推論が行われる場合は、型を定義しないことがベストプラクティスです。

【例外】
変数や定数の定義時に値を代入しない場合は、型を定義するべきです。

let num = 1;
let num2:number ;
//numの場合は、自動的にnumber型と判断されます
//num2の場合は、any型となり型推論が行われません


object型

objectは型推論が行われますが、明示的に定義することもできます。

const person:{
  name:string;
  age:number;
} = {
  name:"shun",
  age:20,
}

const person:{
  name:string;
  age:20;
} = {
  name:"shun",
  age:20,
}
//型の定義では数字そのものを定義することもできます。
//上記のコードでは20以外の数字がオブジェクトで定義されるとエラーになります。


Array型

配列型で複数の変数を格納できるデータ型です。

異なったデータ型と併せて使用することができます。

let sports : string[];

const person:{
  name:string;
  hobbies:string[];
} = {
  name:"shun",
  hobbies:["study","sports"]
}

//配列の型定義はstring[]のように記述します


Tuple型

要素の数を固定し、なおかつ要素の型を指定します。

const person:{
  name:string;
  role:[number,string];
} = {
  name:"shun",
  role:[10,"admin"],
}
//roleがTuple型となります
//上記のように指定することで、要素の数と型を定義することができます

注意点として、Tuple型では異なる型の値の代入は防げますが、pushメソッドでの代入は防ぐことはできません。

person.role[1] = 100;
//配列のインデックス1にはstringが定義されているのでエラーとなる

person.role = [0 , "member" , 20]
//roleには2つの要素しか定義されていないのでエラーとなる

person.role.push("abcd")
//pushメソッドでの代入は防ぐことができない、エラーとはならない


Enum型

ある定数の集合体に対して、番号を付けて管理します。

自動的に数値が割り当てられ、かつ直感的に分かりやすいコードを記述することができます。

列挙型とも呼ばれます。

enum Hobbies{
  baseball,
  baske,
  soccer,
}
//baseballには0、baskeには1、soccerには3が自動的に割り当てられます

enum Hobbies{
  baseball = "me",
  baske = 100,
  soccer = 200,
}
//baseballのように数値だけではなく文字列も割り当てることができます
//何も指定しない場合、0から自動的に割り当てられますが、baskeやsoccerのように好きな数字を割り当てることもできます

enum Hobbies{
  baseball = 10,
  baske,
  soccer,
}
//上記のように指定すると、baskeには11、soccerには12が割り当てられます

以下のように使用します。

const person= {
 hobbies : Hobbies.baske
}

複数の定数が必要になった場合にEnum型を使うと便利です。

any型

any型にはどんな値でも入れることができます。

バニラJavaScriptと同じように、型を定義しないということになります。

Union型

引数の受け取る型を柔軟にする場合などに使用します。

型の定義を柔軟にすることができます。

function calc(a : number | string , b:number){
   return a + b ;
}
//引数aはstringかnumberを受け取ることができます


Literal型

値そのものを厳密に定義するときに使用します。

numberやstringといった型の定義は行いません。

const num = 50 ;
//numはnumber型ではなく、50として定義されます。
//numは50以外の数値はありえないからです。

function call(a : "person" | "dog"  ){
   return a ;
}
//引数aには文字列personか文字列dogしか渡すことができません


型エイリアス カスタム型

何度も同じ型を書くのを防ぎ、同じ型の定義を何度も使いまわすことができます。

typeというキーワードを使用します。

type combinable =  number | string ;

function combine( a:combinable , b :combinable){
 return a + b ;
}
//引数aとbにはtypeで指定した型が定義されます。


type Obj = "person" | "dog" ;

function call(a : Obj ){
   return a ;
}
//Literal型も定義することができます

型エイリアスを使用することでコードの再利用性が向上します。

また、型の定義を1か所で管理することも可能になります。

unkown型

unkown型で定義した変数に変数を代入する場合は、型のチェックを行う必要があります。

any型と似ていますが、unknow型は型のチェックをする必要があります。

どんな型になるか分からない場合に、使用します。

let input : unknown;
let username : string;

input = 20 ;
input = "tarou" ;

username = input
//変数の代入は、型のチェックを行っていないためエラーとなります

if(typeof input ==="string"){
 username = input
}
//変数の代入は、型のチェックを行っているためエラーとはなりません


戻り値の型 基本的な使い方

関数では引数の他に、戻り値の型を定義することができます。

変数と同じように、型推論で戻り値が推測される場合は、型定義を行わないことがベストプラクティスです。

void型

void型は関数がreturn命令を持たないということを示します。

function calc(n1:number, n2:number){
  return n1 + n2;
}

function print(n3:number){
  console.log(n3);
}

print(calc(10,20));
//関数printはcalcの実行結果をconsoleに出力するだけの関数となっています
//このようにreturn命令を持たない関数はvoid型が割り当てられます


function型

any型に対して関数を定義する、特定の関数を型として定義する場合に使用します。

関数がどの引数を受け取り、どの型を返り値として返すか明確に定義できます。

function calc(n1:number, n2:number){
  return n1 + n2;
}

let calcdainyu : ( a:number, b:number) => number ;

calcdainyu = 5;
//定義した関数の引数と返り値をとらないのでエラーとなります

calcdainyuu = calc ;
//定義した関数の引数と返り値をとるので正常に機能します

どこかの関数を呼び出す関数を格納する場合に使用できます。

never型

voidと同じく何も返さない時に指定する型です。

neverは絶対にありえないという意味です。

voidと違う点は、値を絶対に戻り値を返さない関数に対して明示的に指定します。

neverを記述することで、他の開発者のコード可読性が向上します。

最後に

TypeScriptの型について基礎を解説しました。

TypeScriptの型を使うことで、エラーを未然に防ぐことができます。

JavaScriptには存在しない概念なので、苦戦するところではありますがきっちり抑えておきましょう。

最後まで読んでいただきありがとうございました。

この記事の目次
フロントエンドRPGについて

当ブログは、Web開発に役立つ情報を日々の学びをもとに発信しています。
サイト制作やブログのカスタマイズについて承ります。
お気軽にご連絡・ご相談ください。

©2024 フロントエンドRPG Created by KOBI 23プライバシーポリシー