Microsoft/TypeScript

Weak type not rejected when intersected with `ThisType`

Open

#56,995 创建于 2024年1月9日

在 GitHub 查看
 (6 评论) (0 反应) (0 负责人)TypeScript (6,726 fork)batch import
BugDomain: This-TypingHelp Wanted

仓库指标

Star
 (48,455 star)
PR 合并指标
 (平均合并 6天 17小时) (30 天内合并 9 个 PR)

描述

🔎 Search Terms

  • function overload
  • ThisType
  • this

🕗 Version & Regression Information

  • This is a crash

⏯ Playground Link

https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgGIHt3IN4ChnJwBcyAzmFKAOa4C+uAJhAgDZxQowCuICYw6EMm4gADAAp2VEuICUyALwA+ZOPzIAZGkzqtAFQAWwUnoCeABwgAeDOiW5ZskgDd0wBo2ZsOwnnwFCIhJSMrrIAArs-HAsNpj2BPpGJhbWtvaOLm4euEHieAD0BcgAegD86sTIAOQAjNV0srk8EnKKKvm4RaUVBFV1DbSOXcUAAmCkALQQAB6WfNNQUOhQzWLibcqqhcXllSS1jU1AA

💻 Code

interface Foo {
  a: string
}
declare function fun0(arg: () => (
  & Foo
  & ThisType<Foo>
)): void
declare function fun0(arg: (
  & Partial<Foo>
  & ThisType<Foo>
)): void

fun0({
// ^? function fun0(arg: (Partial<Foo> & ThisType<Foo>)): void (+1 overload)
  a: '1'
})
fun0(() => ({
// ^? function fun0(arg: () => (Foo & ThisType<Foo>)): void (+1 overload)
  a: '1'
}))
// @ts-expect-error
fun0(() => ({
// ^? function fun0(arg: (Partial<Foo> & ThisType<Foo>)): void (+1 overload)
  a: 1
}))

When I intersect ThisType with a type similar to {} and use it as a function argument, it will always resolve to this declaration.

🙁 Actual behavior

overload to function fun0(arg: (Partial<Foo> & ThisType<Foo>)): void (+1 overload)

🙂 Expected behavior

overload to function fun0(arg: () => (Partial<Foo> & ThisType<Foo>)): void (+1 overload)

Additional information about the issue

When I comment ThisType intesection, it works.

贡献者指南