enum列挙型
投稿日: 2025年02月15日
型の定義でとても悩んだことがありました!
それは、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
は使えるんです!
以下、例
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の底力を再確認できたました!🤣🤣