Open nwalters512 opened 3 months ago
Simpler repro:
function test<T>(
arr: T[],
cb: ((item: T) => void) | ((item: T, extra: unknown) => void),
) {}
test([1, 2, 3], (item) => {});
Currently, getContextualSignature
returns undefined
in this situation because the 2 signatures that are present here don't pass the compareSignaturesIdentical
check in that function
🔎 Search Terms
"implicitly has an" inference
🕗 Version & Regression Information
⏯ Playground Link
https://www.typescriptlang.org/play/?target=5&ts=5.5.3#code/KYDwDg9gTgLgBASwHY2FAZgQwMbDgQQGcBPJbAJWEIFcAbGAYU1toCMcBrAHgBUAaOAFE4AXiFQo0AHxwA3gFgAUHBVwAFGigB+AFxC4AHzhI6tAVCp0YuuDwCUegG4QEAEwDcSgL5KloSLCIKGhYuAQkZJQ09ACSqFCYMNC8AuQCwmKCEtJySqrqCKgAtnr8cNjMbJx6RKQUlvRMLOzY3GlCUg5wzm6eij6K-tDwyPGheLWRDTBxaInQAAqSRQiEwClw5DIKyqpqhcAltl1LECtrXFt9A0quwNi0mBZw6NRkMAgQSHBFmGAAMggVjANu0MuJJFApGo8qonlBSgBtAC6fFhKloQMKehMRVYaDRuxUBwSSQRKkm9WiM3i8ygp3O6zKW0M4TqUSss1JyWZ6SkhJOy1W63IKKkfSUvwBWJgakRAEY+AAmPgAZlRcFVAkwEWw6iQdlE23RcAsMGoUG+3wAVNa4ErrnZ3EA
💻 Code
🙁 Actual behavior
The type of
n
in themapLimit
callback is inferred asany
:🙂 Expected behavior
I would expect the type of
n
to be inferred asnumber
.Additional information about the issue
This example is based on the types for the
async
package:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/b9820410f85f259cbad6065d8cb6f23f403109ac/types/async/index.d.ts#L321-L325
Note that if the type for
iterator
inmapLimit
is changed to either justAsyncResultIteratorPromise<T, R>
or justAsyncResultIterator<T, R, E>
(that is, no longer a union type), things work as expected andn
has typenumber
.I found a very old discussion of what looks to be the same issue in the
DefinitelyTyped
repo: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/24297. The issue described there is exactly the one I'm facing. One commenter claimed that things worked correctly, and another commenter claimed that changing the way thatasync
was imported had some effect? Neither of those sounds plausible to me.I found some issues that may describe the same or a similar problem:
However, my knowledge of TypeScript internals/terminology isn't strong enough to say for sure that this isn't a novel issue I'm facing. If this is in fact a duplicate, please close it as such and I'll add this example to the relevant issue. Thank you!