【发布时间】:2020-01-20 17:50:36
【问题描述】:
我有一个对象类型Options,有两个键:
-
strategy:需要一个未知类型参数的函数 -
parameter:与strategy的第一个参数类型相同
我希望能够做到以下几点
type FooParameter = { foo: string }
type BarParameter = { bar: string }
const fooOptions: Options = {
strategy: (parameter: FooParameter) => {},
parameter: { foo: 'foo' }
}
const barOptions: Options = {
strategy: (parameter: BarParameter) => {},
parameter: { bar: 'bar' }
}
fooOptions.parameter 的类型应该从 fooOptions.strategy 推断出来,barOptions.parameter 从 barOptions.strategy 推断出来
现在的 TypeScript 可以做到吗?
【问题讨论】:
-
与其推断,为什么不让
Options泛型呢?例如。type Options<T> = { strategy: (parameter: T) => void, parameter: T }. -
我应该添加,我试过了:typescriptlang.org/play/… 但我想避免传递参数类型的需要
-
上下文是github.com/octokit/core.js#authentication 的
authStrategy和auth选项。authStrategy设置为外部包,参数类型未知。因此推断它会比使用类型参数提供更好的开发者体验。 -
Typescript 可以推断泛型类型的类型参数,因此调用者不需要显式编写该类型。我应该更清楚的是,这不是您的库推断它,而不是推断用户的数据类型。您的文档中的示例用法看起来应该适用于泛型类型,而无需对示例用法代码进行任何更改。
-
“Typescript 可以推断泛型类型的类型参数”这听起来像我想要的,但无法弄清楚如何。您能否在下面的答案中分享一个示例?
标签: typescript