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.

交差(インターセクション)型と共用体型(ユニオン)型

Posted at

交差(インターセクション)型

複数の型を&でまとめたもの。

例)

typescript
type Type1 = {
    name: string
    age: number
}

type Type2 = {
    age: number
    hobby: string
}

type Type3 = Type1 & Type2 // `Type1`と`Type2`を `&` でまとめる。

const testObj:Type3 = {
    name: "test",
    age: 32,
    hobby: "basketball"
}

上記の例で、Type1ではnameageのプロパティがあり、Type2ではagehobbyのプロパティがある。
共通で持っているプロパティはageのみ。
この二つを'&'でまとめたType3の型は以下の通りになる。

typescript
type Type3 = {
    name: string
    age: number
    hobby: string
}

なお、共通のプロパティがあるが型が異なる場合はどうなるか。

typescript
type Type1 = {
    name: string
    age: number
}

type Type2 = {
    name: string
    age: string
    hobby: string
}

type Type3 = Type1 & Type2

const testObj:Type3 = {
    name: "test",
    age: 32,  // 絶対あり得ない型になるため`naver`エラーになる。
    hobby: "basketball"
}

では、共通するプロパティの片方の型がユニオン型だとどうなるだろう。
正解は、共通する方のみが採用される。

typescript
type Type1 = {
    name: string
    age: number
}

type Type2 = {
    name: string
    age: number | string
    hobby: string
}

type Type3 = Type1 & Type2

const testObj:Type3 = {
    name: "test",
    age: 32,
    hobby: "basketball"
}

上記の例だと、Type3ageの型はnumberのみに共有しているので、numberのみになる。

共用体型(ユニオン)型

複数の型を|で区切ってorを表現したもの。

typescript
type Type1 = {
    name: string
    age: number
}

type Type2 = {
    age: number
    hobby: string
}

type Type3 = Type1 | Type2 // `|`で区切って`or`を表現

const testObj:Type3 = {
    age: 32,
    hobby: "basketball"
}

ここでType3の型は、Type1もしくはType2になる。
よって、testObjType1もしくはType2の型に合致すれば、エラーは出ない。
逆にType1にもType2にも合致しなかった場合は、エラーになる。
例)

typescript
type Type1 = {
    name: string
    age: number
}

type Type2 = {
    age: number
    hobby: string
}

type Type3 = Type1 | Type2

const testObj:Type3 = { // `Type1`と`Type2`2は`age`のプロパティがあるが、`testObj`にはないためエラーになる
    name: "test",
    hobby: "basketball"
}
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?