TypeScriptの型を0から学ぶ!すべての型の一覧とその使い方。
- 投稿日:2021.12.09 最終更新日:2022.01.28
- TypeScript
- サンプルコード, 初心者向け, 経験者向け
この記事では、TypeScriptを学習するうえで要となる型について学んでいきたい。
“TypeScirpt”という名前が示す通りTypeScriptはデータ型の指定を明示的におこなう静的型付け言語。
JavaScriptは型の判定をプログラムの実行時におこなう動的型付け言語であり、JavaScriptとTypeScirptの一番大きな違いはこの「型の扱い方」による違いだと言えるだろう。
この記事では、TypeScriptに存在するすべての型を網羅的に紹介していきたいと思う。
基本型(プリミティブ型)
まずはすぐにプログラミングの核をなす基本型(プリミティブ型)から説明する。
number 数値型
数値型はその名の通り数値をあらわすデータ型。
TypeScriptではnumberで表される。
数値型を使用した例
let myValue: number = 12;
myValue = 8;
console.log(++myValue);
変数の宣言と同時に値を代入する際は、以下のように型を省略することもできる。
let myValue = 12;
基本的にTypeScriptでは、型は省略しないほうがいいと考えたほうがいいだろう。
TypeScriptでは、小数点以下を含む数にはdoubleを使用する。
string 文字列型
文字列型にはstringが使われる。
文字列型を使用した例
let myValue: string = 'Hello, ';
myValue += "again";
console.log(myValue);
TypeScriptでは文字列をあらわす際に以下の3種類の句点を使用することができる。
- 「’」 シングルクォーテーション
- 「”」ダブルクォーテーション
- 「`」バッククォート
バッククォートで囲む場合は複数行の文字列を改行などを含めて指定することが可能。
また文字列の中で変数を使用することができる。変数は${}で囲む。
`Hello!!
Welcome to my site ${name}`
boolean 真偽型
真偽型はtrueとfalseという2種類の状態しか持たないもっともシンプルなデータ型。
TypeScriptではbooleanで表される。
真偽型を使用した例
let isInit: boolean = false;
isInit = !isInit;
console.log(isInit);
symbol シンボル型
symbolはJavaScriptとTypeScriptに存在する特殊なデータ型だ。
symbolはsymbolファクトリーを使って生成され、symbolは常にユニークであるという特徴を持つ。
シンボル型を使用した例
const ARTICLE_NAME: symbol = Symbol('name');
const USER_NAME: symbol = Symbol('name');
console.log(ARTICLE_NAME === USER_NAME); // falseとなる
シンボルの常にユニークであるという特徴を活かして、タイプの識別などに使用するといいだろう。
const LOG_INFO = Symbol('INFO');
const LOG_WARN = Symbol('WARN');
const LOG_ERROR = Symbol('ERROR');
switch(level) {
case LOG_INFO:
console.log(msg); break
case LOG_WARN:
console.warn(msg); break;
case LOG_ERROR:
console.error(msg); break;
}
void
通常、voidは関数がいかなる返り値も持たないことを明示するために使用される。
public printMessage(message: string) : void {
console.log(message);
}
変数のデータ型としてvoidを指定することもできるがnullかundefinedしか代入することができないので、意味のある使い方をするのは難しいだろう。
nullとundefined
TypeScriptではnullとundefinedもひとつのデータ型として捉えることができる。
nullとundefinedはJavaScript・TypeScriptにおいては区別される。
nullはnullという値が代入されている状態であり、undefinedは値がまだ代入されていない状態だ。
const nullVal: null = null;
const undefinedVal: undefined = undefined;
console.log(nullVal);
// null
console.log(undefinedVal); // undefined
console.log(nullVal === undefinedVal); // falseとなる
nullとundefinedのどちらでも無いことをチェックするには以下のようにif条件に変数名のみを記述する。
if (checkedValue)
any 任意型
anyを指定すると型のチェックはおこなわれない。
以下のようなコードも有効だ。
let myData: any = 120;
myDate = 'hello'; // エラーにならない
let myValue = '' // 型の指定と初期化を省略した変数は自動でanyとみなされる。
myValue = 999;
ユーザ定義型
次にユーザ定義型に分類されるデータ型を見ていこう。
array 配列
配列は同じデータ型を持つ変数の集まり。
TypeScriptではJavaScriptと異なりanyを型として指定しない限りは、配列は同じデータ型しか含めることができない。
配列を使用した例
let nameArr: string[] = ['Thomas', 'John', 'Martin'];
nameArr.push('Sara');
nameArr[1] = 'Jonny';
nameArr.forEach(name => console.log(name));
配列はArray<>を使ってあらわすこともできる。
let numberArr: Array<number> = [5, 12, 8];
interface インターフェイス
インタフェースはオブジェクトの構造を定義するためのオブジェクト。
インターフェイスとクラスは似た特徴を枠割を持つが、インターフェイスはオブジェクトの構造を定義するのみでロジックなどは通常持たない。
export interface Human {
firstName: string;
lastName: string;
age: number;
}
const sampleHuman: Human = {
firstName: 'Thomas',
lastName: 'Müller',
age: 25
}
console.log(JSON.stringfy(sampleHuman));
class クラス
クラスはひとつの目的によって集められたフィールドや関数の集まり。
オブジェクト指向プログラミングでは通常クラスは、商品や顧客といった現実世界の物を象徴することが多い。
class Customer {
cutomerId: number;
email: string;
constructor(id: number, email: string) {
this.customerId = id;
this.email = email;
}
showCustomerDate() {
console.log(this.customerId + ':' + this.email);
}
}
クラスとインターフェイスの違いについてはこちらの記事を参考にしてほしい。
function 関数
TypeScriptではJavaScriptと同様に関数もひとつのデータ型として考えることができる。
function multiple(a: number, b: number): number {
return a * b;
}
let mutiple = function (a: number, b: number): number {
return a * b;
};
tuple タプル
タプルは異なる二つのデータ型を納めるデータ型。
let myTuple: [number, string];
myTuple = [3, 'Mike'];
console.log(myTuple[1]);
指定したのと異なるデータ型を代入することは出来ない。また、2つのデータ型の順番は固定されている。
let myTuple: [number, string];
myTuple = [12, false] // エラー
myTuple = ['Tony', 12]; // エラー
union ユニオン
ユニオン型を使えば当てはまる可能性のある複数のデータ型を指定することができる。
平たく言えばユニオン型はOR条件のデータ型といえる。
let personOne: Teacher | Student;
ユニオン型はnullになる可能性がある値をセーフにするために使うこともできる。
let message: string | null;
message = getMessageFromDatabase();
enum 列挙型
enumはひとつのテーマに沿った定数の集まり。
プログラム内でよく使われる値はenumとして定義しておくとプロジェクト内の不整合を防ぐことができる。
enum OrderStatus {
Ordered, Payed, Delivered
}
if (order.status === OrderStatus.Payed) {
console.log('料金は支払い済みです。');
}