本文へスキップ

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

公開 2

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

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

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

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

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

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

ts
const placeId = "place1" as PlaceId
const eventId = "event1" as EventId
結果なし