1
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 5 years have passed since last update.

TypeScriptの組み込み型関数は便利だ

1
Posted at

今まであまり使って来なかったんですが、いざ使ってみるとすごく便利でした。

組み込み型関数とは?

既存の型から新しい型を生成する組み込みユーティリティです。
ジェネリクスを使って既存の型に被せることで新しい型を生成できます。

最近使ってみて特にいい感じだったもの

全ての型関数を紹介するわけではありません。悪しからず。

Omit

TypeScript3.5で追加された新しい組み込み型関数。
既存の型から特定のプロパティを除いた型を作ることが出来ます。

type Hoge = {
 a:string
 b:number
 c:boolean
}
type Omitted = Omit<HOGE,"c">;
/**
{
 a:string
 b:number
}
*/

オブジェクトの生成過程の型を管理する場合などに個人的にはよく使います。
ちなみに、当然ですが以下のように除いたものを補完してやれば元の戻ります。

const hoge:HOGE = {...omitted,...{c:true}};

Partial

全てのプロパティに?を付けた型を作ります。

type Hoge = {
 a:string
 b:number
 c:boolean
}
type PartialHoge = Partial<HOGE>;
/**
{
 a?:string
 b?:number
 c?:boolean
}
*/

正直初めに見たときは、何に使うのか今一つピンとこなかったのですが、
外部からの入力値を受けて部分更新に使うという使い方を聞いて納得しました。
以下のようにスプレッド構文と組み合わせることでいちいち各プロパティの存在確認を行わなくても存在する値だけで上書きが出来ます。
ReduxのReducerで辺りでかなり使えそう。

//oldHogeが古いHoge型,inputPartialがPartial<HOGE>型とする
const newHoge = {...oldHoge,...inputPartial};

Exclude型

主にUnion型から特定の型を除外した型を作ります。

type Fuga = "AAA" | "BBB" | "CCC";
type FugaWithoutC = Exclude<FUGA,"CCC">;

Union型で列挙した定数のうち、一部だけ使いたい時にとても便利です。
似たような役割にExtractもありますが、ちょっとこれは使いどころが思いつきませんでした。
二つの型の共通部分のみを抜き出すものなのですが、大体のケースはそのまま宣言すれば済む気がします。

ReadOnly

全てのプロパティにReadOnlyを付けた型を作ります。
Immutableなオブジェクトを作りたい時に。

1
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
1
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?