プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • TypeScript
  • 【TypeScript】「共用体型(union型)」「Tuple(タプル)型」、「Lite…
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【TypeScript】「共用体型(union型)」「Tuple(タプル)型」、「Literal型」、「列挙型(enum)」、「type guard」

04.18

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

共用体型(union型)とは?

記述方法

下記の例の場合はstringでもnumberでもどちらの型でも代入することができますよという場合の型になります。

1
2
3
let a: string | number;
a = 'あ';
a = 2;

Tuple(タプル)型とは?

配列の要素の型が明確にわかっている場合に使います。共用型でも同様のことが可能ですが具体的に要素の順番も指定して制約を強くしたいという場合にTuple型を使います。

記述方法

1
let tupple: [number, string] = [123, 'str'];

注意点

後からpushなどで追加する場合はエラーになりません。TypeScriptの思想的には初期値のチェックはしっかりやってくれるのですが後から追加する場合などは面倒みてくれないのでそこは注意しましょう。

Literal型とは?

使って欲しいデータ型だけでなく、使って欲しい具体的な値まで縛るデータ型のことです。

書き方

下記のように縦棒で繋ぎます。

1
2
3
let kanjou: '喜' | '怒' | '哀' | '楽' = '楽';
kanjou = '怒';   //OK
kanjou = '冷静'; //コンパイルエラーになる。

constの型推論

なお、constを使うことによって自動的に型推論でリテラル型になります。

1
const hello = "こんにちは";

例えば上記のような記述なら「"こんにちは"」という文字を扱うリテラル型になります。

列挙型(enum)とは?

enumには二つの使い道があります。

文字列の列挙

1
2
3
4
5
enum fruits {
  apple = "林檎",
  orange = "オレンジ",
  meron = "メロン",
}

以下のように列挙型以外の値を再代入しようとしてもエラーになります。通常のオブジェクトならこうはならないです。

1
2
3
4
5
6
7
8
9
enum fruits {
  apple = "林檎",
  orange = "オレンジ",
  meron = "メロン",
}
 
let fruit = fruits.apple;
fruit = "レモン"; // NG
fruit = fruits.meron; // OK

Literal型のUnionとの比較

では、LiteralのUnion('apple' | 'orange'みたいな型)と比べると、enumは明示的に使う文字列を指定できます。

数値の列挙

列挙型を使用する事で0番から順番に番号を振っていく事が可能です。

1
2
3
4
5
6
7
8
9
10
11
12
enum Week {
  San,
  Mon,
  Tue,
  Wen,
  Thu,
  Fri,
  Sat,
}
 
//0が出力される。
console.log(Week.San);

連番の初期値を変えるには?

通常は連番は0から始まりますが、下記のように指定することで別番号から始める事が可能です。下記の例で言えば1から順番に連番がふられることになります。

1
2
3
4
5
6
7
8
9
enum Week {
  San = 1,
  Mon,
  Tue,
  Wen,
  Thu,
  Fri,
  Sat,
}

メリット

これを普通のJavaScriptコードで実現しようとすると連想配列を作って番号を1つ1つ振っていく必要があります。そうした場合は人手を介することになりますのでミスが発生しやすいですし、欠番号が発生しないです。

type guard

TypeScriptで変数の型がUnionとかで複数存在しうる場合に型を特定する方法です。

typeofを使う。

該当の型であることを保証します。TypeScriptの文法というよりはJavaScriptの文法です。

1
2
3
if (typeof a === "string") {
   a.toUpperCase;
}

inを使う

オブジェクトに該当のキーがあることを保証します。TypeScriptの文法というよりはJavaScriptの文法です。

1
2
3
if ('name' in aObj) {
  aObj.name
}

instanceofを使う

以下のようにCarクラスとAirPlaneクラスのどちらかだった場合でもCarクラスであることを保証します。これもJSに存在します。

1
2
3
4
5
a: Car | AirPlane;
 
if (a instanceof Car) {
  a.run;
}

スポンサーリンク
  • 2020 04.18
  • miyabisan2
  • コメントを書く
  • TypeScript
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2020 04.13

    【TypeScript】「変数」、「定数」、「データ型」、「型推論」、「配列」

  2. 2021 02.28

    【TypeScript】「Record」型について

  3. 2020 04.19

    【TypeScript】「関数」、「クラス」に関する知識

  4. 2022 01.08

    【TypeScript】「オーバーロード」について

  5. 2020 04.18

    【TypeScript】「tsconfig.json」とは?

  6. 2021 03.14

    【TypeScript】「Exclude」、「Extract」、「NonNullable」について

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【TypeScript】「tsconfig.json」…

【TypeScript】「never型」や「void型…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー