JY-CONTENTS

JY

JY-CONTENTS
search

+

MENU

【Typescript】名前的型

【Typescript】名前的型

(DATE)

-

2020.08.06

(CATEGORY)

-

typescript は型を名前ではなく構造で判断しますが、名前で判断した方が都合がいい場合もあり、そういう場合の型を名前で判断させる為の方法です。

名前的型

以下のコードを実行した場合、エラーを期待する場所でもエラーにはなりません。

type Id1 = string
type Id2 = string

function sam(id: Id2) {

}

let id: Id1 = 'abcdef'
sam(id) // OK ※エラーにはならない

引数の型は Id2 で、渡された値の型は Id1 なのですが、型を構造で判断しているのでエラーにはなりません。
このような場合に型を名前で判断させる「名前的型」が役に立ちます。

型のブランド化

名前的型のそれぞれに対して、合成的な「型のブランド」を作成します。

type Id1 = string & { readonly brand: unique symbol }
type Id2 = string & { readonly brand: unique symbol }

「ブランド」として unique symbol を使いその型が一意である事を示しています。 指定した string が、指定したブランド型であることを主張できるように、そのブランドと string の交差を取りました。

コードまとめ

これで渡された値の型が Id1 の場合はエラーになります。

type Id1 = string & { readonly brand: unique symbol }
type Id2 = string & { readonly brand: unique symbol }

function Id1(id: string) {
    return id as Id1
}

function Id2(id: string) {
    return id as Id2
}


function sam(id: Id2) {

}

let id1 = Id1('abcdef')
let id2 = Id2('ghijkl')

sam(id2) // OK 
sam(id1) //エラー

NEW TOPICS

/ ニュー & アップデート

SEE ALSO

/ 似た記事を見る

JY CONTENTS UNIQUE BLOG

search-menu search-menu