最近改めてTypescriptの型について学んだので、過去に記述した内容のアップデートも含めて今回記事の更新を行なった。
型の定義
型の指定は次の形式で記述する。
const 変数名: データ型 let : データ型
プリミティブ型
代表的なプリミティブ型は次の通り。
型名 | 例 |
---|---|
string | let name: string = 'Hello Typescript' |
number | let value: number = 99 |
boolean | let isChecked: boolean = true const isVisible: boolean = false |
null | let value: null = null |
undefined | let value: undefined = undefined |
Array
配列の要素の型を指定し、後ろに角かっこを付ける。
// 要素がnumber の配列 let aryValue: number[] = [1, 2, 3, 4] // 要素が string の配列 let strValue: string[] = ['hello', 'Typescript']
二次元配列もこの通り。
let aryValue: number[][] = [ [1, 2, 3, 4], [5, 6, 7, 8] ]
tuple
一見して配列のようにも見えるが、順序と個々の要素の型が決まっている。
let tupValue: [number, string] = [22, 'Hello Tuple'] // これは型指定の順序と値の代入の順序が異なるためエラーとなる let tupValue: [number, string] = ['Hello Tuple', 22]
object
オブジェクトを示す型は objectで基本的な定義方法は次の通り。
const user: object = { name: 'Tarou', age: 25 } // こちらでもOK const user2: {} = { name: 'Jirou', age: 33 }
オブジェクトのプロパティの型を指定することもできる。
const user3: { name: string, age: number } = { name: 'Saburou', age: 18 }
any
any型はなんでも受けいれてしまうため、Typescriptを使うメリットが活かせない。
基本的には使わない方が良いが、APIリクエストのレスポンスなど、
型の指定が難しい場合に、明確な意図を持って使用すべき型だと思う。
let value: any = 1 value = 'string_value' value = {"key": "value"}
null と undefined
定義方法は他の型と同じ。
let nullValue: null = null
デフォルトでは、この2つの値はどういった型の変数にも代入でき、
以下のような代入が可能となっている。
let hoge: string = 'hello' hoge = null hoge = undefined
strictNullChecks : true
コンパイル時のオプション strictNullChecks : true
を指定すると、
上記のような代入はエラーになる。
変数にnullやundefinedが代入される場合は、次のようにユニオン型の型注釈で表現する事ができる。
let hoge: string | null = 'hello' hoge = null
never
never型は下記に該当する関数の戻り値に指定できる。
- 絶対にreturnされない関数
- 例外 throw する関数
function neverReturn(): never { throw new Error('もどりません') } neverReturn()