Skip to main content

PushAble And PushAbleOnly

This page discusses how to use PushAbleOnly and PushAble.

info

PushAbleOnly<T> and PushAble<T> are Record<string, T> under the hood.

The purpose of PushAbleOnly is to make sure only RTDB can generate keys for children.

PushAble and PushAbleOnly work in the same way, except that we can set or update PushAble node.

PushAbleOnly

This section discusses how to use PushAbleOnly

Type Checks

import {
MetaTypeCreator,
createRef,
getDatabase,
PushAbleOnly,
push,
set,
update,
} from 'firesagejs'

export type Example = MetaTypeCreator<{
a: PushAbleOnly<{ c: number }>
b: Record<string, { c: number }>
}>
const exampleRef = createRef<Example>(getDatabase())

push(exampleRef('a'), { c: 123 }) // ok, 'a' is PushAbleOnly

push(exampleRef('b'), { c: 123 }) // not ok, 'b' is not PushAble or PushAbleOnly

set(exampleRef('a'), { someKey: { c: 123 } }) // not ok, cannot set PushAbleOnly

set(exampleRef('a/someKey'), { c: 123 }) // ok, 'a/someKey' is not PushAbleOnly

update(exampleRef(), ['a'], [{ someKey: { c: 123 } }]) // not ok, 'a' is PushAbleOnly

update(exampleRef('a'), ['someKey'], [{ c: 123 }]) // ok, 'a/someKey' is not PushAbleOnly
how to use PushAbleOnly

Understanding Error Messages

we can only push PushAbleOnly or Pushable

we cannot set PushAbleOnly

we cannot update PushAbleOnly

PushAble

This section discusses how to use PushAbleOnly

tip

If you just want to temporary set or update PushAbleOnly node, instead of changing it to PushAble type, use // @ts-expect-error to supress the type error.

Only use PushAble if you want RTDB and other sources to generate keys.

Type Checks

import {
MetaTypeCreator,
createRef,
getDatabase,
PushAble,
push,
set,
update,
} from 'firesagejs'

export type Example = MetaTypeCreator<{
a: PushAble<{ c: number }>
b: Record<string, { c: number }>
}>
const exampleRef = createRef<Example>(getDatabase())

push(exampleRef('a'), { c: 123 }) // ok, 'a' is PushAble

set(exampleRef('a'), { someKey: { c: 123 } }) // ok, 'a' is PushAble

update(exampleRef(), ['a'], [{ someKey: { c: 123 } }]) // ok, 'a' is PushAble
we cannot update PushAbleOnly