UNPKG

@vitarx/responsive

Version:
104 lines (103 loc) 4.68 kB
import { type SignalOptions, type SignalToRaw } from '../../core/index.js'; import { Ref } from './ref.js'; /** * 创建一个响应式引用信号 * * 创建一个包装对象,使其成为响应式数据源。当引用的值发生变化时, * 所有依赖于该引用的计算和副作用将自动更新。默认情况下,对嵌套对象进行深度代理。 * * @template Value - 信号值的类型 * @returns {Ref<Value | undefined, true>} - 创建的响应式引用信号 */ export declare function ref(): Ref<any>; /** * 创建一个响应式引用信号 * * 创建一个包装对象,使其成为响应式数据源。当引用的值发生变化时, * 所有依赖于该引用的计算和副作用将自动更新。默认情况下,对嵌套对象进行深度代理。 * * @template Value - 信号值的类型 * @returns {Ref<Value | undefined, true>} - 创建的响应式引用信号 */ export declare function ref<Value>(): Ref<Value | undefined>; /** * 创建一个响应式引用对象,用于在响应式系统中包装原始值或引用 * * @template Value - 引用中存储的值的类型 * @template Deep - 是否深度转换对象的布尔值,默认为true * @param value - 要包装的初始值,可以是普通值或已有的引用 * @param {object | boolean} [options] - 信号的选项配置,支持直接传入boolean指定deep配置 * @param {boolean} [options.deep=true] - 是否深度代理嵌套对象,为true时会递归代理所有嵌套属性 * @param {function} [options.compare=Object.is] - 值比较函数,用于决定是否触发更新,默认使用Object.is进行比较 * @returns - 返回一个响应式引用对象,该对象会跟踪其值的变化 */ export declare function ref<Value, Deep extends boolean = true>(value: Value | Ref<Value, Deep>, // 要包装的值,可以是原始值或已有的引用 options?: SignalOptions<Deep> | Deep): Ref<Value, Deep>; /** * 创建一个浅层响应式引用对象 * * @returns 返回一个浅层响应式引用对象,初始值为 undefined */ export declare function shallowRef(): Ref<any, false>; /** * 创建一个浅层响应式引用对象 * * @template Value - 引用值类型 * @returns 返回一个浅层响应式引用对象,初始值为 undefined */ export declare function shallowRef<Value>(): Ref<Value | undefined, false>; /** * 创建一个浅层响应式引用对象 * @param value - 初始值 * @param {object} [options] - 可选配置项 * @param {function} [options.compare=Object.is] - 值比较函数,用于决定是否触发更新 * @returns - 返回一个浅层响应式引用对象 */ export declare function shallowRef<Value>(value: Value | Ref<Value, false>, // 初始值,可以是普通值或非深层的响应式引用 options?: Omit<SignalOptions, 'deep'>): Ref<Value, false>; /** * 判断是否为 Ref 对象 * * 注意和 `isRefSignal` 的区别,`isRef` 只判断是否为 `Ref` 对象,而 `isRefSignal` 是判断对象是否具有响应式的 value 属性 * * @param {any} val - 任意值 * @return {boolean} 是否为 Ref 对象 * @example * // 创建一个 Ref 对象 * const count = ref(0) * * // isRef 只检查对象是否为 Ref 实例 * console.log(isRef(count)) // true * console.log(isRef(0)) // false * console.log(isRefSignal(count)) // true ,因为 Ref 实例也是一个 RefSignal 的实现 * * // 对于自定义的Ref对象,两者的表现不同 * class CustomRef { * [SIGNAL_SYMBOL]:true * [REF_SIGNAL_SYMBOL]:true * // 省略了构造函数等相关代码,只是为了演示 * get value() {//...} * set value(newValue) {//...} * } * const customRef = new CustomRef(0) * console.log(isRef(customRef)) // false,因为不是 Ref 实例 * console.log(isRefSignal(customRef)) // true,因为 CustomRef 符合RefSignal的特征 */ export declare function isRef(val: any): val is Ref; /** * 解除Ref对象的包装,返回其原始值 * * 在响应式系统中,该函数用于获取Ref对象包装的原始值。如果传入的是普通值,则直接返回该值。 * 这个函数在处理可能是Ref对象或普通值的参数时特别有用,可以统一处理两种情况。 * * @template T - 值的类型 * @param {T | Ref<T>} ref - 需要解包的值,可以是Ref对象或普通值 * @returns {T} 如果输入是Ref对象,返回其.value值;如果是普通值,则原样返回 * @example * // 处理Ref对象 * const count = ref(0) * console.log(unref(count)) // 0 等效于 toRaw(count) * // 处理普通值 * console.log(unref(100)) // 100 */ export declare function unref<T>(ref: T): SignalToRaw<T>;