Microsoft/TypeScript
GitHub ã§èŠã`as const` breaks intra expression inference
Open
#62,220 opened on 2025幎8æ6æ¥
Domain: check: Type InferenceHelp WantedPossible Improvement
Repository metrics
- Stars
- Â (48,455 stars)
- PR merge metrics
-  (å¹³åããŒãž 6d 17h) (30d ã§ 9 merged PRs)
説æ
ð 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