Microsoft/TypeScript

Union of functions with typed `this`, fails with no parameters

Open

#41,213 创建于 2020年10月23日

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

描述

TypeScript Version: 4.0.2

Code

interface Context {
  hello: boolean
}

type OptionsTest =
      | ((this: Context) => void)
      | ((this: Context) => PromiseLike<any>)
      | ((this: Context, done: boolean) => void)

function container (test: OptionsTest) {

}

// This does not work!

container(function () {
  console.log(this.hello);
})

// This works!

container(function (done) {
  console.log(this.hello);
})

// This works!

type Single = (this: Context) => void;
function SingleContainer (test: Single) {}
SingleContainer(function () {
  console.log(this.hello)
})

Expected behavior:

Correctly provide this type to (typed union) functions without arguments.

Actual behavior:

No this type is being provided for functions without arguments.

Playground Link

StackOverflow Link

Search Terms

  • contextually typed
  • this parameter
  • union of functions

贡献者指南