1. ホーム
  2. タイプスクリプト

[解決済み】タイプからプロパティを除外する

2022-03-29 20:36:47

質問

ある一つのプロパティを型から除外したいのですが、どうすればいいですか?どうすればよいですか?

例えば、私は

interface XYZ {
  x: number;
  y: number;
  z: number;
}

そして、プロパティを除外したい z を取得するために

type XY = { x: number, y: number };

解決方法は?

TypeScriptのバージョンが3.5以上の場合

TypeScript 3.5では Omit 型が標準ライブラリに追加されました。使い方は以下の例を参照してください。

TypeScript 3.5未満のバージョンの場合

TypeScript 2.8では Exclude という型が標準ライブラリに追加され、省略型を簡単に書くことができるようになりました。

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>

TypeScript 2.8未満のバージョンの場合

を使用することはできません。 Exclude しかし、上記と同じような定義を使用するために、この型の代替品を作成することができます。しかし、この置換は文字列型に対してのみ有効であり、そのため Exclude .

// Functionally the same as Exclude, but for strings only.
type Diff<T extends string, U extends string> = ({[P in T]: P } & {[P in U]: never } & { [x: string]: never })[T]
type Omit<T, K extends keyof T> = Pick<T, Diff<keyof T, K>>


そして、そのタイプの使用例。

interface Test {
    a: string;
    b: number;
    c: boolean;
}

// Omit a single property:
type OmitA = Omit<Test, "a">; // Equivalent to: {b: number, c: boolean}

// Or, to omit multiple properties:
type OmitAB = Omit<Test, "a"|"b">; // Equivalent to: {c: boolean}