Shared
共享 Hook 与 TypeScript 类型工具(useIsomorphicLayoutEffect / OptionalKeys / Overwrite / Print)
Shared
@dune2/tools/shared 提供了一些在多个模块间通用的能力:一个 SSR/CSR 兼容的 Hook,以及若干 TypeScript 类型工具。
useIsomorphicLayoutEffect
当代码会在 SSR 环境运行时,直接使用 useLayoutEffect 会产生警告;useIsomorphicLayoutEffect 会在浏览器使用 useLayoutEffect,在 SSR 自动回退为 useEffect。
import { useIsomorphicLayoutEffect } from '@dune2/tools/shared';
useIsomorphicLayoutEffect(() => {
// 安全:SSR 时等价于 useEffect
}, []);
类型工具
OptionalKeys
用于取出 “A 中哪些 key 在 B 中是可选/可覆盖的” 的 key 集合(常用于组合 props 类型)。
import type { OptionalKeys } from '@dune2/tools/shared/OptionalKeys';
Overwrite
用 B 覆盖 A 的同名字段类型。
import type { Overwrite } from '@dune2/tools/shared/Overwrite';
type A = { id: string; count: number };
type B = { count: string };
type C = Overwrite<A, B>; // { id: string; count: string }
辅助“展开”复杂类型,方便在 IDE 里查看最终类型结果(类型调试用)。
import type { Print } from '@dune2/tools/shared/Print';