|
1 | | -// @ts-nocheck |
2 | 1 | /** |
3 | 2 | * Copyright 2026 Google LLC |
4 | 3 | * |
|
18 | 17 | import { |
19 | 18 | signal, |
20 | 19 | computed, |
21 | | - Signal, |
22 | | - WritableSignal, |
23 | 20 | isSignal, |
24 | 21 | effect, |
| 22 | + Signal as NgSignal, |
| 23 | + WritableSignal as NgWritableSignal, |
25 | 24 | } from '@angular/core'; |
26 | 25 |
|
27 | 26 | import {FrameworkSignal} from './signals.js'; |
28 | 27 | import {runFrameworkSignalTests} from './signals-testing.shared.js'; |
29 | 28 |
|
30 | 29 | declare module './signals.js' { |
| 30 | + // Setup the appropriate types for Angular Signals |
31 | 31 | interface SignalKinds<T> { |
32 | | - readonly: Signal<T>; |
33 | | - writable: WritableSignal<T>; |
| 32 | + // @ts-ignore : Suppress cross-compilation interface overlap |
| 33 | + readonly: NgSignal<T>; |
| 34 | + // @ts-ignore : Suppress cross-compilation interface overlap |
| 35 | + writable: NgWritableSignal<T>; |
34 | 36 | } |
35 | 37 | } |
36 | 38 |
|
37 | 39 | // Test FrameworkSignal with Angular signals explicitly mapped over SignalKinds. |
38 | 40 | const AngularSignal = { |
39 | 41 | computed: <T>(fn: () => T) => computed(fn), |
40 | | - isSignal: (val: unknown): val is Signal<any> => isSignal(val), |
| 42 | + isSignal: (val: unknown): val is NgSignal<any> => isSignal(val), |
41 | 43 | wrap: <T>(val: T) => signal(val), |
42 | | - unwrap: <T>(val: Signal<T>) => val(), |
43 | | - set: <T>(sig: WritableSignal<T>, value: T) => sig.set(value), |
| 44 | + unwrap: <T>(val: NgSignal<T>) => val(), |
| 45 | + set: <T>(sig: NgWritableSignal<T>, value: T) => sig.set(value), |
44 | 46 | effect: (fn: () => void, cleanupCallback: () => void) => { |
45 | 47 | const e = effect(cleanupRegisterFn => { |
46 | 48 | cleanupRegisterFn(cleanupCallback); |
47 | 49 | fn(); |
48 | 50 | }); |
49 | 51 | return () => e.destroy(); |
50 | 52 | }, |
51 | | -} satisfies FrameworkSignal; |
| 53 | +} as unknown as FrameworkSignal; // Bypass Mono-compilation interface overlap |
| 54 | +// The cast above is needed because tsc is merging all our test files together, |
| 55 | +// and the SignalKinds interface is being declared multiple times, causing a |
| 56 | +// type collision. Normally, the AngularSignal would `satisfies FrameworkSignal`, |
| 57 | +// and the declaration of SignalKinds wouldn't need to suppress anything. |
52 | 58 |
|
53 | 59 | runFrameworkSignalTests('Angular implementation', AngularSignal); |
0 commit comments