ちょっとした技術メモを忘れないうちに書いていく

TypeScript 型の種類

2021-11-13

いまさらながらTypeScriptに入門


基本の型

boolen

単純に true か false が入れられる型

let flg:boolean = true;
flg = false;

number

10進数、2進数、8進数、16進数が格納できる。

let no:number = 9;
no = 0xFFFF00;//16進数
no = 0o273;//8進数
no = 0b10001;//2進数

no = 9.2; //小数点

// NaN、Infinityも代入できる
no = NaN;
no = Infinity;

no = 2_000_000;//「_」で区切ってもエラーにはならない

String

文字列型を格納。

let str:string = '文字列';
str = `テンプレート文字列もOK${str}`;

Array

長さが決まっていない配列の定義。連想配列も定義できる。

  • string[] : 配列の定義方法1、型の後に[]をつける
  • Array<string>:配列の定義方法2、Arrayに型を渡す
  • string[][]:多次元配列の定義
  • { [key: string]: string;}:連想配列の定義
// 文字列型の配列を定義する
let arr:string[]  = ['aaa','bbb','ccc'];
let arr2:Array<String> = ['aaa','bbb','ccc'];

// 多次元配列
let arr3:string[][] = [['AAA'],['BBB','CCC'],['DDD']];

// 連想配列
let arr4: { [key: string]: string;} = {
  'aaa':'AAA',
  'bbb':'BBB',
  'ccc':'CCC',
  // 'aaa':'AAA',//同じキーを定義しようとするとエラー
};

//データの追加、記述方法はどっちでもOK
arr4['ddd'] = 'DDD';
arr4.eee = 'EEE';

Tuple(タプル)

長さと型の順番が決まっている配列を定義。 配列内に異なる型を指定することができる。


// タプル型の宣言
// 文字列、数値の順番の配列を定義
let tuple: [string, number] = ['文字列',5];
console.log(tuple[0]);// 文字列
console.log(tuple[1]);// 5


// 文字列、数値の配列、ブーリアンの配列
let tuple2 : [string , number[], boolean] = ['文字', [2 ,3] , true];
console.log(tuple2[1]); //[ 2, 3 ]

enum

列挙型の定義

//数値の列挙型の定義
//Months.JANには0が格納され、インクリメントされていく
enum Months {
  JAN ,
  FEB,
  MAR,
};
//値は0から順番に割り当てられる
console.log(Months.FEB);
//1
console.log(Months[2]);//添え字に数値を渡すと名前を取得できる
//MAR

//1からの始まりしたいときは最初だけ初期化する
enum Months2 {
  JAN = 1,
  FEB,
  MAR,
};

// 文字列型のenum
// 明示的に値に文字列を追加する
enum COLORS {
  BLACK = '黒',
  RED = '赤',
  WHITE = '白',
}
// 後で追加する
enum COLORS {
  BLUE = '黒',
}
// 同じ名前を追加すると重複エラーになる
// enum COLORS {
//   BLUE = '黒',
// }

any

型を指定しないのでコンパイルでエラー検出されない。

let test:any = 23;
test = '文字';
test = [25,'文字列'];
test = true;
// コンパイル時はエラーにならないが、実行時にエラーになる
console.log(test[1].toLowerCase());

unkonown

anyと同じく何でも入れられる型。 使用するときはtypeofで型を判断して使用しないとコンパイルエラーとなる

let no:unknown=2;
// no++;// そのまま使うとエラーになる

// typeofで型を判断してから処理を書く
if(typeof no === 'number'){
	let sum:number = no + 10;
}

null、undefined

変数にnull、undefinedが格納できる。

let n:null = null;
let u:undefined = undefined;

// 文字列かundefinedが格納できる変数を定義
let str:string|undefined = '文字列';
str = undefined;

オブジェクト型

オブジェクトを格納する変数を定義する。 オブジェクトが持つプロパティ名、型まで定義することができる。 インターフェースを使うほうがメジャーなのかな?

//どんなオブジェクトでも入れられる型
let obj:object;

//プロパティまで指定する型
let obj2:{name:string} =
{
  name:"名前",
};

void、never

  • void:戻り値がない関数(関数の予備元にもどる)
  • never:例外発生関数など予備もとに戻らない関数の型
// 戻り値を返さない関数
function func():void{
  console.log('ログ出力など');
}

// 例外発生により予備もとに戻らない関数
function func2():never{
  throw new Error("エラーになりました");
}