-
Notifications
You must be signed in to change notification settings - Fork 13.1k
Closed
Description
π Search Terms
array type
π Version & Regression Information
- This is the behavior in every version I tried
β― Playground Link
π» Code
type Getter<T> = () => T
type Setter<T> = {
<U extends T>(value: (prev: T) => U): U
<U extends T>(value: Exclude<U, Function>): U
}
type Signal<T> = Getter<T> & Setter<T>
type Reactive<T> = Signal<T> & (T extends object ? { readonly [K in keyof T]: Reactive<T[K]> } : {})
type ReactiveArray = Reactive<Array<unknown>>
type ReactiveMap = Reactive<Map<unknown, unknown>>
type ArrayForEach = ReactiveArray['forEach'] // Resolves to Array<unknown>['forEach']
type MapForEach = ReactiveMap['forEach'] // Resolves to Signal<Map<unknown, unknown>>['forEach'] & {}π Actual behavior
The forEach type is inferred as Array<unknown>['forEach'], retaining the original Array method signature instead of being transformed into a Signal type like Signal<Array<unknown>['forEach']> & {}. This issue affects all Array properties.
π Expected behavior
For ReactiveArray, defined as Reactive<Array<unknown>>, I expect ReactiveArray['forEach'] to be Signal<Array<unknown>['forEach']> & {}, similar to how ReactiveMap['forEach'] is inferred as Signal<Map<unknown, unknown>>['forEach'] & {}, reflecting the recursive application of Reactive<T>.
Additional information about the issue
No response
Metadata
Metadata
Assignees
Labels
No labels