Как получить правильный выводимый тип при передаче возвращаемого значения в качестве закрывающей переменной, захваченной собственным телом функции? - PullRequest
0 голосов
/ 06 ноября 2019

TS версия: 3.7

код, как показано ниже, и обратите внимание на его комментарий, как я могу безопасно использовать self.fourtyTwo.

type RefSelf<Input extends Record<string, (...args: any[]) => unknown>> = {
  [k in keyof Input]: () => ReturnType<Input[k]>
}

declare function calculate <
  Input extends Record<string, (self: RefSelf<Input>) => unknown>,
>(input: Input): RefSelf<Input>

const { fourtyTwo, fourtyTwo2 } = calculate({
  fourtyTwo: () => 42,
  // (parameter) self: RefSelf<{fourtyTwo: unknown; fourtyTwo2: unknown;}>
  // (property) fourtyTwo: () => any
  fourtyTwo2: (self) => self.fourtyTwo(),
})

детская площадка: http://www.typescriptlang.org/play/#code/C4TwDgpgBAShBmBlCAbeAeAkgOzAV2CggA9gJsATAZ1ggGMB7AJwvSuCYEtsBzAGigAKAHSiAhkx5UAXFDHYQAbQC6ASigBeAHxQ82ANbYGAd2xadGqAG8AUFCiL9UblH0QQDeFBz5gy2YLq2rTAeEzYACrgEFi4BI7KWjYAvjY2FPQoEtDwenTAnAzYUHRiKHR4WWRQ6HbecYQkZJQ0cIwsbBzc-EJUqPCycEj9sb5aQTp6hiZmfDZagty+sj4EqoMIyGijBEk2jNjs1lDwDGGgEcYMAqfnIJcMAExQyZolZRVVEIK29rdMFyuAQmUAALI85vYAPRQoRgCRiAC2EDITHUfTQG2G2ys-0BDFkUyMpgA3CczgD7ldHoSDMTsCTkklobDBGAmAxIJT1HiqQShCD5CA6ryHjTev0QRj4MJRVdAnNkqogA

...