0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TypeScriptにおけるas constの役割

0
Posted at

as constの役割がいまいち理解できてなかったので、見返す用にまとめます。
自分の理解用に抽象化しているので詳細はサバイバルTypeScriptなどをご参照ください。

概要

as constを使うとTypeScriptでリテラル型の定数を定義できる。オブジェクトや配列を変更不可能(読み取り専用)にし、それらのプロパティの型をリテラル型とする。

具体例

const CounterActions = {
  DECREMENT: 'DECREMENT',
  INCREMENT: 'INCREMENT',
  ADD: 'ADD',
} as const;

この場合、CounterActionsオブジェクトの各プロパティは'DECREMENT' | 'INCREMENT' | 'ADD'という文字列リテラル型として推論され、変更不可能になる。

as constの役割の要点

1 変更不可能にする

  • オブジェクトや配列のプロパティを読み取り専用にする。
  • readonly修飾子が自動的に追加される。

2 リテラル型として推論させる

  • 各プロパティの型をその具体的な値(リテラル型)として推論する。
  • 'DECREMENT'はstringではなく、文字列リテラル型'DECREMENT'として推論される。
  • as constをしない場合は型推論でstring型と判断されてしまう。

使用場面と注意点

使用場面

  • 変更不可の定数オブジェクトや配列を定義したいとき。状態管理のためのアクションタイプや設定値など。

  • 特定のリテラル型として値を扱いたいとき。'DECREMENT'や42など特定の値のみを許容するユニオン型を作成する場合。

使用例

const directions = ['North', 'South', 'East', 'West'] as const;

type Direction = typeof directions[number];
// Direction は 'North' | 'South' | 'East' | 'West' というユニオン型

注意点

  • 可読性
    as constを使うと、コードの意図が明確になり、可読性が向上しますが、過度に使用するとかえって混乱することがあります。適切なコメントやドキュメントを追加すると良いでしょう。

  • 変更不可の性質
    as constを使用すると、オブジェクトや配列のプロパティが読み取り専用になります。これを意図しない場合は注意が必要です。

関連

  • readonly修飾子:
    プロパティを変更不可にするために使用される修飾子。as constはこれを自動的に適用する。

  • ユーティリティ型:
    TypeScriptには多くのユーティリティ型(型を操作するためのツール)がある。as constと組み合わせて使うことが多い。

Partial<T>,プロパティをオプショナルにする
Required<T>,プロパティを必須にする
Readonly<T>,プロパティを読み取り専用にする
Pick<T>,指定したプロパティのみを抽出
Record<K, T>: キーの型Kと値の型Tを持つオブジェクト型を生成
Pick<T, K>: 型Tから指定されたプロパティKだけを抽出
Omit<T, K>: 型Tから指定されたプロパティKを除外
ValueOf<T>,ビルトインのユーティリティ型ではないので
あらかじめ「type ValueOf<T> = T[keyof T];」のように定義が必要。
T型のキーを抽出し、抽出したキーに対応するvalue(値)を取得する。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?