enum列挙型

enum列挙型

投稿日: 2025年02月15日

学習振り返り
要約
  • 三択ボタンのUIを実装する際に、boolean型では対応できないため、列挙型(enum)を使ってWi-Fi速度や安定性、空席状況などを定義した。
  • schema.prismaでもenumを使用でき、DBの構成として適しているが、TypeScriptではenumが非推奨とされるため、ユニオン型の検討もした。
  • Prismaを使えば、schema.prismaを基にTypeScriptの型を自動生成できるため、便利さを再確認した。

はじめに

型の定義でとても悩んだことがありました!
それは、boolean型で三択ボタンのUIを実装するときにです😂
booleanだと、true or falseの二択のみで、三択の時どうすればいい?とハゲ散らかしてました笑
そのことをslackの#timesで呟いてたら、天使のあかねさんがアドバイスくださいました!
あかねさん:「列挙にすればいいのでは?」
それだ!…
続く

列挙型

列挙型とは、名前付きの値のセットを定義する方法の一つです。

以下例、

//enumx.ts 
export enum WifiSpeed { 
HIGH = "HIGH", //"高速" 
MEDIUM = "MEDIUM", //"中速" 
LOW = "LOW", //"低速" 
}

 export enum WifiStability { 
VERY_STABLE = "VERY_STABLE", //"非常に安定" 
STABLE = "STABLE", //"安定" 
UNSTABLE = "UNSTABLE", //"不安定" 
} 

export enum SeatAvailability {
 AVAILABLE = "AVAILABLE", //"空いている" 
CROWDED = "CROWDED", //"混雑中" 
FULL = "FULL", //"満席" 
}

この例は、
WifiSpeed(Wi-Fi速度), WifiStability(Wi-Fi安定), SeatAvailability(空席状況)それぞれをenumで定義しています。
このように特定の値を、グループで定義することで可読性が上がりとてもわかりやすくなりますね!

schema.prismaでも、enumは使える!!!!


schema.prismaでも、enumは使えるんです!
以下、例

enum WifiSpeed {
  HIGH    //"高速"
  MEDIUM //"中速"
  LOW   //"低速"
}
enum WifiStability {
  VERY_STABLE //"非常に安定"
  STABLE    //"安定"
  UNSTABLE   //"不安定"
} 
enum SeatAvailability {
  AVAILABLE  //"空いている"
  CROWDED   //"混雑中"
  FULL     //"満席"
}
model Cafe {
  id                     Int               @id @default(autoincrement())
  createdAt              DateTime          @default(now())
  updatedAt              DateTime          @updatedAt
  cafeName               String            @db.VarChar(100)
  thumbnailImage         String            @db.VarChar(255) 
  area                   String
  storeAddress           String  
  openingTime            String            @db.VarChar(20)
  closingHours           String            @db.VarChar(20)
  closingDays            String
  cafeUrl                String            @db.VarChar(255)
  menuOrdered            String
  wifiAvailable          Boolean
  wifiSpeed              WifiSpeed?
  wifiStability          WifiStability?
  powerOutlets           Boolean
  seatAvailability       SeatAvailability?
  starRating             Int               
  comment                String
  locationCoordinates    String
  userId                 Int
  information            Information[]
  favorites              Favorite[]
  users                  Users             @relation(fields: [userId], references: [id])
}

enum(列挙型)を使って、Wi-Fi速度、Wi-Fi安定、空席状況の三択ボタンを決まった選択肢から選べる形式にできるのです!
だがしかし、TypeScriptではenumは非推奨とされているらしいです(多くの記事で見かけます)


enum以外で調べたら、ユニオン型で型定義し直した方がいいのかな?とまた悩み、ぶべさんに相談しました!
そしたら、「schema.prismaはTSではなくDBの構成なもでenumでOKです!」と回答いただき、ユニゾンで型定義をし直すことについては、
schema.prismaをもとに、TSの型を自動で生成することができます」と言われ、10章で書いてあったことを思い出しました笑

import { WifiStability } from "@prisma/client"; 
WifiStability.VERY_STABLE

インポートして使えばいいだけのことです笑
忘れてましたwwww

おわり

そう考えると、prismaって便利じゃね!?
prismaの底力を再確認できたました!🤣🤣


prismaって便利じゃね!?

シェア!

Threads
記事一覧に戻る
Threads
0