TypeScriptの型まとめ

TypeScriptの方の書き方をまとめていく。

boolean型

const value: boolean;

number型

const num: number;

string型

const greet: string;

オブジェクト型

const cat: {
  name: string;
  age: number;
} = {
  name: "tama",
  age: 2,
};

配列型

const colors: string[] = ["red", "blue"];

配列にstring型やnumber型が混在する場合はanyなどが使える。

const colors: any[] = ["red", "blue", 9999];

Tuple型

const human: [string, number, boolean] = ["man", 26, true];

配列の中身の型を制限する。

上記の例だと、1番目はstring型、2番目はnumber型、3番目はboolean型しか受け付けない。

Enum型

// メダルの色を列挙させておく。
// MedalColorという型ができる。
enum MedalColor {
  GOLD = "金メダル",
  SILVER = "銀メダル",
  BRONZE = "銅メダル",
}

const medal = {
  color: MedalColor.GOLD,
};

// 上で列挙した値以外はエラーとなる。

// NG。
medal.color = "金メダル";

// OK。
medal.color = MedalColor.GOLD;

Enumは、Enumeration(列挙)の略。

その名の通り、値を列挙されておいてそれ以外は受け付けない。

Any型

let variable: any = "foo";
variable = {};
variable.bar = "bar";

any型は、なんでも入れることができる。

つまり、素のJavaScriptと同じ。

TypeScriptを使う意味があまりなくなるので、基本使わないこと。

Union型

let union: number | string = "Hello";
union = 6;

複数の型を受け付けれるようにする。

上の例だと、|はor演算子のようにnumber型か、string型かを受け付けることができる。

リテラル型

const foo: "foo" = "foo"; // OK
const foo: "foo" = 2; // NG
const foo: "foo" = false; // NG

リテラル型は決まった値しか受け付けない。

上の例のように「foo」という文字列のリテラル型しか受け付けなくなる。

ちなみに、リテラルとは、直接記述されたデータ値のこと。

上の例では「foo」が文字列リテラル、「2」が整数リテラル、「false」が真偽値リテラルとなる。

typeエイリアス

type StringNumber = string | number;
const foobar: StringNumber = 3;

別名をつけることで、型を変数のように扱うことができる。

関数宣言で型を使う場合

function numCheck(num1: number, num2: number): boolean {
  if (num1 === num2) {
    return true;
  } else {
    return false;
  }
}

引数にそれぞれ型付けはする。戻り値の型付けは引数のあとに指定する。

何も返さない関数の場合は、void型を使う。

function helloWorld(): void {
  console.log("Hello World!");
}

undefined型とnull型

const foo: undefined = undefined; // OK
const bar: null = null; // OK

const baz: undefined = null; // OK
const qux: null = undefined; // OK

undefined型とnull型はそれぞれundefinedとnullを変数入れることができる。それ以外はエラーとなる。

関数の変数に型付けする関数型

function NumCheck(num1: number, num2: number): boolean {
  if (num1 === num2) {
    return true;
  } else {
    return false;
  }
}

// 関数を入れる型をつける(型注釈)
const tmpNumCheck: (num: number, num2: number) => boolean = NumCheck;

変数へ関数を代入するときに型付けするときに明示的に記述する。

コールバック関数に型付け

function plusOne(val: number, callback: (val: number) => number): void {
  const result = callback(val + 1);
  console.log(result);
}
plusOne(1, (val) => {
  return val * 2;
});

前述の関数の型付け同様に、callback関数の後にセミコロンをつけて型付けを指定する。

unknown型

let unknownValue: unknown;
unknownValue = "foo"; // OK
unknownValue = false; // OK
unknownValue = 1; // OK
let bar = unknownValue; // NG

if(typeof unknownValue === 'string'){
  let bar = unknownValue // OK
}

代入するときはany型のようになんにでも入れることができるが、他の変数に代入するなど使うときに注意が必要。

typeofで明示的に型のチェックを行えば、使うことができる。

never型

function error(msg: string): never {
    throw new Error(msg);
}

存在する可能性がない、値を返すことがない場合に使う。

コメント