Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

posted at

updated at

Organization

【TypeScript】TypeScript特有のリテラル型の使いどころ

TypeScript特有の型「リテラル型」

TypeScriptの学習を進めていくと「リテラル型」という型が出現します。
これはTypeScript特有の型のようです。

リテラル型は、
「任意に指定したリテラル(文字列リテラル、数値リテラル....)以外を許可しない型」です。
(文字の意味そのままの説明になってしますが...。)

> let morningGreeting: 'Hello' = 'Hello';
>  morningGreeting = 'Good Evening';
[eval].ts:2:1 - error TS2322: Type '"Good Evening"' is not assignable to type '"Hello"'.

上記はコンパイルエラーとなります。

変数morningGreeting'Hello'という文字列リテラル型と定義されているので、
'Good Evening'という文字列リテラルは許容されず、'Hello'以外は受け入れられません。

型については理解できるのですが、文字列を決めうちで定義してどこに活かせるのか初見の時は疑問でした。

単独ではそこまで使い道がない

色々なコードを読み、リテラル型は単独で使われることがほとんどありませんでした。

大抵は下記のように、ユニオン型と君合わせて、複数のリテラル型を定義して列挙型のように使用されています。

> let greeting: 'Hello'| 'Hey' | 'Hi' = 'Hello';
> greeting = 'Hello';
> greeting = 'Yah';
[eval].ts:2:1 - error TS2322: Type '"Yah"' is not assignable to type '"Hello" | "Hey" | "Hi"'.

このように、enumの列挙型のようなことが実現できます。
enumよりシンプルな書き方でスッキリしますし、直感的で読みやすいので、
ユニオン型とリテラル型を組み合わせて書く型が多いようです。

> enum Greeting { 
>  Hello =  'Hello',
>  Hey = 'Hey',
>  Hi = 'Hi',
> }

> let greeting: Greeting = Greeting.Hello; 
> greeting = 'Yah'; 
[eval].ts:7:1 - error TS2322: Type '"Yah"' is not assignable to type 'Greeting'.

説明のために変数への代入で説明しましたが、実際に使うとなればtypeで型を定義して使うことが多いと思います。


type Greeting = 'Hello'| 'Hey' | 'Hi';

const hoge: Greeting = 'Hello';
const fuga: Greeting = 'Yah'; //コンパイルエラー

TypeScriptは様々な型を組み合わせることができるので、そこも面白いポイントだなと思っています。

最後まで読んで頂きありがとうございました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?