(initialValue: T, options?: CreateSignalOptions<T>)
| 70 | * @see [Angular Signals](guide/signals) |
| 71 | */ |
| 72 | export function signal<T>(initialValue: T, options?: CreateSignalOptions<T>): WritableSignal<T> { |
| 73 | const [get, set, update] = createSignal(initialValue, options?.equal); |
| 74 | |
| 75 | const signalFn = get as SignalGetter<T> & WritableSignal<T>; |
| 76 | const node = signalFn[SIGNAL]; |
| 77 | |
| 78 | signalFn.set = set; |
| 79 | signalFn.update = update; |
| 80 | signalFn.asReadonly = signalAsReadonlyFn.bind(signalFn as any) as () => Signal<T>; |
| 81 | |
| 82 | if (typeof ngDevMode !== 'undefined' && ngDevMode) { |
| 83 | const debugName = options?.debugName; |
| 84 | node.debugName = debugName; |
| 85 | signalFn.toString = () => `[Signal${debugName ? ' (' + debugName + ')' : ''}: ${signalFn()}]`; |
| 86 | } |
| 87 | |
| 88 | return signalFn as WritableSignal<T>; |
| 89 | } |
| 90 | |
| 91 | export function signalAsReadonlyFn<T>(this: SignalGetter<T>): Signal<T> { |
| 92 | const node = this[SIGNAL] as SignalNode<T> & {readonlyFn?: Signal<T>}; |
searching dependent graphs…