Public Theta Blog

TypeScriptでNominalな型付けを実現する

TypeScript公式リポジトリのWiki内にあるFAQ「Can I make a type alias nominal?」でワークアラウンドとして紹介されているように、交差型(&)を利用する。

たとえば次のような型を用意しておけば:

type Nominal<T extends string> = {
    __nominal__: T
}

次のように型でのみ区別可能な文字列型を作ることができる:

type PlaceId = string & Nominal<"PlaceId">
type EventId = string & Nominal<"EventId">

ただし次のように型アサーションが必要となる:

const placeId = "place1" as PlaceId
const eventId = "event1" as EventId