【发布时间】:2021-08-05 15:47:56
【问题描述】:
我正在尝试找出是否有一种方法可以从实现的属性中推断出接口中的类型。
简化示例:
interface Options {
type: 'string' | 'number'
demanded?: boolean
}
interface Command {
// The parameter options will contain the interpreted version of the options property
callback: (options: InferOptionTypings<this>) => void
options: { [key: string]: Options }
}
// Infer the options
// { type: 'string, demanded: false} | { type: 'string' } => string | undefined
// { type: 'string, demanded: true } => string
// { type: 'number', demanded: false} | { type: 'number } => number | undefined
// { type: 'number, demanded: true } => number
type InferOptionTypings<_ extends Command> = ... // here i've been stuck for very long
我已经阅读了 yargs 的类型(这显然是受到 yargs 的启发),但我还没有弄清楚如何使它以这种风格工作或我缺少什么/如果这甚至是可能的。
示例用例:
let command: Command = {
callback: (options) => {
options.a // string
options.b // number | undefined
options.c // string | undefined
options.d // error
},
options: {
a: {
type: 'string',
demanded: true,
},
b: {
type: 'number',
},
a: {
type: 'string',
},
},
}
【问题讨论】:
-
你能举个例子说明你将如何使用
Command.callback吗? -
当然可以! (现在在编辑问题中的示例)。虽然我不确定,如果这是你的意思
-
@TonyBorchert 顺便说一句,正在研究一些图书馆或其他东西吗?这里stackoverflow.com/questions/68676771/… 是一个非常相似的问题。我只是想写一篇专门讨论这个问题的文章,我不知道如何命名这个用例
-
我没有写一个库,它只是一些命令的一些类型,但感谢链接中的额外信息,如果你有这篇文章很高兴阅读它,虽然我想不出任何名字对于此类问题
标签: typescript typing