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の底力を再確認できたました!🤣🤣
