Help us understand the problem. What is going on with this article?

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

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

組み込み型関数とは?

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

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

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

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なオブジェクトを作りたい時に。

Why do not you register as a user and use Qiita more conveniently?
  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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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