32 lines
708 B
TypeScript
32 lines
708 B
TypeScript
import { Schema as S } from "@effect/schema"
|
|
import { MutableClass } from "./MutableClass"
|
|
import { pipe } from "remeda"
|
|
import { Mutable } from "./Mutable"
|
|
import { MobXObservable } from "./MobXObservable"
|
|
import { Class } from "./Class"
|
|
|
|
|
|
const UserSuper = <Self>() => pipe(
|
|
Class<Self>("User")({
|
|
id: S.BigIntFromSelf,
|
|
role: S.Union(S.Literal("BasicUser"), S.Literal("Admin")),
|
|
}),
|
|
|
|
Mutable,
|
|
MobXObservable,
|
|
)
|
|
|
|
|
|
class User extends UserSuper<User>() {}
|
|
|
|
const user1 = new User({ id: 1n, role: "BasicUser" })
|
|
user1.id = 1n
|
|
|
|
|
|
class Admin extends User.extend<Admin>("Admin")({
|
|
role: S.Literal("Admin")
|
|
}) {}
|
|
|
|
const user2 = new Admin({ id: 2n, role: "Admin" })
|
|
user2.id = 2n
|