Microsoft/TypeScript

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

开放

#52,394 创建于 2023年1月24日

 (12 条评论) (0 个反应) (0 位负责人)TypeScript (13,395 个派生)batch import
BugDomain: check: Type InferenceHelp Wanted

仓库指标

星标
 (108,860 个星标)
PR 合并指标
 (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

贡献者指南