forEach<T, U extends ArrayLike<T>>(
obj: U,
iterator: (value: U[number], key: number, obj: U) => void,
context?: any
): U;
produces
fun <U : ArrayLike<T>> forEach(obj: U, iterator: (value: Any, key: Number, obj: U) -> Unit, context: Any = definedExternally): U
T is gone as we determine it's determine it's redundant because it's not used in parameter types or return types, but other type parameter depends on it, which results in compilation error