TS версия: 3.7
код, как показано ниже, и обратите внимание на его комментарий, как я могу безопасно использовать self.fourtyTwo.
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