-
Notifications
You must be signed in to change notification settings - Fork 13k
Open
Labels
Help WantedYou can do thisYou can do thisPossible ImprovementThe current behavior isn't wrong, but it's possible to see that it might be better in some casesThe current behavior isn't wrong, but it's possible to see that it might be better in some cases
Milestone
Description
π Search Terms
const context expression assertion inference type parameter
π Version & Regression Information
- This is the behavior in every version I tried
β― Playground Link
π» Code
declare function test<T, D>(arg: {
input: D;
produce: (arg: D) => T;
consume: (arg: T) => number;
}): D;
const broken = test({
input: 100,
produce: (arg) => arg.toString(), // 'arg' is of type 'unknown'.(18046)
consume: (arg) => arg.length,
} as const);
const working = test({
input: 100,
produce: (arg) => arg.toString(), // `arg` inferred as `number`
consume: (arg) => arg.length,
});
π Actual behavior
as const
is the only difference between those two and its presence breaks assigned parameter type in produce
π Expected behavior
I think as const
should not impact inference this way and both should be inferred just OK. It's just that the broken
case should infer 100
instead of number
for the D
type parameter
Additional information about the issue
No response
lishaduck
Metadata
Metadata
Assignees
Labels
Help WantedYou can do thisYou can do thisPossible ImprovementThe current behavior isn't wrong, but it's possible to see that it might be better in some casesThe current behavior isn't wrong, but it's possible to see that it might be better in some cases