From 486f393cb5bcb7c0e3fc5ad345bac6a034022f76 Mon Sep 17 00:00:00 2001 From: harris-miller Date: Sun, 24 Mar 2024 12:38:32 -0600 Subject: [PATCH 1/2] removed forEach second generic on root function --- test/forEach.test.ts | 5 +++++ types/forEach.d.ts | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/test/forEach.test.ts b/test/forEach.test.ts index 3913897..41ffa58 100644 --- a/test/forEach.test.ts +++ b/test/forEach.test.ts @@ -14,3 +14,8 @@ expectType(forEach(__, arrRO)(noop)); expectType(forEach(noop)(arr)); expectType(forEach(noop)(arrRO)); + +// inline arrow functions should get type inferred +let someMutVar: number; +expectType(forEach(num => { someMutVar + num; }, arr)); +expectType(forEach(num => { someMutVar + num; }, arrRO)); diff --git a/types/forEach.d.ts b/types/forEach.d.ts index aa291a3..90b1ac8 100644 --- a/types/forEach.d.ts +++ b/types/forEach.d.ts @@ -1,5 +1,5 @@ import { Placeholder } from './util/tools'; export function forEach(fn: (x: T) => void): (list: U) => U; -export function forEach(__: Placeholder, list: U): (fn: (x: U extends readonly (infer T)[] ? T : never) => void) => U; -export function forEach(fn: (x: T) => void, list: U): U; +export function forEach(__: Placeholder, list: U): (fn: (x: U extends readonly (infer T)[] ? T : never) => void) => U; +export function forEach(fn: (x: U extends readonly (infer T)[] ? T : never) => void, list: U): U; From 3b0e504ea92fa9319cf6ebdac7b3d3f1e81742ad Mon Sep 17 00:00:00 2001 From: harris-miller Date: Sun, 24 Mar 2024 12:48:32 -0600 Subject: [PATCH 2/2] fix for addIndex(forEach) use case --- types/forEach.d.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/types/forEach.d.ts b/types/forEach.d.ts index 90b1ac8..5065e86 100644 --- a/types/forEach.d.ts +++ b/types/forEach.d.ts @@ -3,3 +3,5 @@ import { Placeholder } from './util/tools'; export function forEach(fn: (x: T) => void): (list: U) => U; export function forEach(__: Placeholder, list: U): (fn: (x: U extends readonly (infer T)[] ? T : never) => void) => U; export function forEach(fn: (x: U extends readonly (infer T)[] ? T : never) => void, list: U): U; +// this last one is for addIndex(forEach) +export function forEach(fn: (item: T) => void, list: readonly T[]): T[];