type RenderEnv = 'client' | 'server' class Env { current: RenderEnv = this.detect() currentId = 0 set(env: RenderEnv): void { if (this.current === env) return this.currentId = 0 this.current = env } reset(): void { this.set(this.detect()) } nextId() { return ++this.currentId } get isServer(): boolean { return this.current === 'server' } get isClient(): boolean { return this.current === 'client' } private detect(): RenderEnv { if (typeof window === 'undefined' || typeof document === 'undefined') { return 'server' } return 'client' } } export let env = new Env()