Microsoft/TypeScript

No type inferrence of callback arguments inside a tuple union type

開放

#55,632 建立於 2023年9月5日

 (5 則留言) (0 個反應) (0 位負責人)TypeScript (13,395 個分叉)batch import
BugDomain: check: Type InferenceHelp Wanted

倉庫指標

星標
 (108,860 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

🔎 Search Terms

  • discriminated union inference
  • union argument inference

🕗 Version & Regression Information

  • This is a compilation error in tsserver 3.3.2

⏯ Playground Link

https://www.typescriptlang.org/play?#code/C4TwDgpgBAkgdgMwgJwILIOZQLwCgpQA+UA2gIwA0UAFAIYBcUcArgLYBGKAlDgHxQA3APYBLACYBdfEVIAmKtXaMAzsGQi4GHtn7DxEgNy4AxkLiqotTI3hI0mHKUo1a2-gG8oAX0O4gA

💻 Code

type InferArg =
  | [1, (a: number) => void]
  | [2, (b: string) => void];
const arg: InferArg = [1, (a) => { }];

🙁 Actual behavior

I get a compilation error:

Parameter 'a' implicitly has an 'any' type.(7006)

🙂 Expected behavior

a should be inferred to be a number because I already passed 1 as the first tuple element. Type inference should be identical to this code:

type InferArg = [1, (a: number) => void];
const arg: InferArg = [1, (a) => { }];

Additional information about the issue

No response

貢獻者指南