Component as class
All checks were successful
Lint / lint (push) Successful in 11s

This commit is contained in:
Julien Valverdé
2025-07-22 01:57:41 +02:00
parent 3484664832
commit e11bbff234
2 changed files with 6 additions and 8 deletions

View File

@@ -5,6 +5,8 @@ import type { ExcludeKeys } from "./utils.js"
export interface Component<E, R, P extends {}> extends Pipeable.Pipeable {
new(_: never): {}
readonly body: (props: P) => Effect.Effect<React.ReactNode, E, R>
readonly displayName?: string
readonly options: Component.Options
@@ -21,10 +23,6 @@ export namespace Component {
}
}
export interface ComponentClass<E, R, P extends {}> extends Component<E, R, P> {
}
const ComponentProto = Object.seal({
pipe() { return Pipeable.pipeArguments(this, arguments) }

View File

@@ -28,16 +28,16 @@ const RouteComponent = Component.make(function* RouteComponent() {
Component.withRuntime(runtime.context)
)
const SubComponent = Component.make(function* SubComponent(props: { readonly value?: string }) {
class SubComponent extends Component.make(function* SubComponent(props: { readonly value?: string }) {
const id = yield* makeUuid4.pipe(Effect.provide(GetRandomValues.CryptoRandom))
return <Text>{id}</Text>
})
}) {}
const MemoizedSubComponent = SubComponent.pipe(
class MemoizedSubComponent extends SubComponent.pipe(
Component.memo,
Component.suspense,
Component.memo,
)
) {}
type T = typeof MemoizedSubComponent extends Component.Memoized<infer P> ? P : never
export const Route = createFileRoute("/dev/memo")({