Microsoft/TypeScript

`satisfies` changes the generic type, "resolves" it immediately

Open

#52,394 建立於 2023年1月24日

在 GitHub 查看
 (12 留言) (0 反應) (0 負責人)TypeScript (6,726 fork)batch import
BugDomain: check: Type InferenceHelp Wanted

倉庫指標

Star
 (48,455 star)
PR 合併指標
 (平均合併 6天 17小時) (30 天內合併 9 個 PR)

描述

Bug Report

It seems that using satisfies on a value that is bound to a generic type, in some way resolves the generic type at that place.

const foo = <T extends 1 | 2>(bar: T) => {
  // PROBLEM: a and b should have the same type.
  const a = bar satisfies any; // using any type that doesn't use the generic T here creates this problem
  //    ^? 1 | 2
  const b = bar;
  //    ^? T extends 1 | 2
}

Playground link

🔎 Search Terms

satisfies changes type, generic, widening

🕗 Version & Regression Information

Using 4.9.4 now with satisfies and noticed this.

  • This changed between versions 4.9 and 4.8 when satisfies was introduced
  • This is the behavior in every version I tried, and I reviewed the FAQ
  • I was unable to test this on prior versions because satisfies didn't exist

⏯ Playground Link

Playground link

🙁 Actual behavior

a and b have different types as seen in the playground

🙂 Expected behavior

satisfies should be a no-op

貢獻者指南