🎃

typescript の基本的な Utility type についてまとめてみる

2024/06/16に公開

Partial と Required

プロパティを 任意にしたり、必須にしたりする型。Partial (部分的)と Required(必須) という意味

type User = {
id: number;
name: string;
age: number;
};

type PartialUser =  Partial<User>
// 型は以下のようになる
type PartialUser = {
    id?: number | undefined;
    name?: string | undefined;
    age?: number | undefined;
}

type RequiredlUser =  Required<User>
// 型は以下のようになる
type RequiredlUser = {
    id: number;
    name: string;
    age: number;
}

Pick と Omit

特定のプロパティを取り出したり取り除いたりする型。Pick (選ぶ)と Omit(省く) という意味

type User = {
id: number;
name: string;
age: number;
};

type PickUser = Pick<User, "id" | "name">;
// 型は以下のようになる
type PickUser = {
    id: number;
    name: string;
}

type OmitUser = Omit<User, "id" | "name">;
// 型は以下のようになる
type OmitUser = {
    age: number;
}

Extract と Exclude

特定の型を抽出したり除外したりする型。Extract (抽出する)と Exclude(除外する) という意味

type T = string | number | boolean;

type Excluded = Exclude<T, boolean>;
// type Excluded = string | number
;
type Extracted = Extract<T, string | number>;
// type Extracted = string | number

Parameters と ReturnType

関数の引数の型を取得するのと、関数の戻り値の型を取得します。Parameter (引数)と Return(戻り値) という意味


type Greet = (name: string, age: number) => string;
type Params = Parameters<Greet>;
// type Params = [string, number]

const greetParams: Params = ["Hoge", 30];

type Result = ReturnType<Greet>;
// type Result = string

const greetResult: Result = "Hello, Hoge!";

Readonly

すべてのプロパティを読み取り専用にします。

type User = {
  name: string;
  age: number;
};

const readonlyUser: Readonly<User> = {
  name: "Hoge",
  age: 35
};
// readonlyUserのプロパティは変更不可
// readonlyUser.name = "Bob"; // エラー: Cannot assign to 'name' because it is a read-only property.

まとめ

対になっている型や、日本語の意味を整理することでより理解が深まりました。

Discussion