![](/img/trans.png)
[英]How to infer the return type of a function based on an argument that contains a generic?
[英]Infer argument type based on a prior argument's generic type
我有一个泛型类型定义如下:
export type LogBuilder<
T extends Logger<U>,
U extends LoggerOptions
> = (options: U) => T;
我可以按如下方式使用它:
interface WinstonLogger extends Logger<WinstonOptions> {
// Object.keys(Winston.config.syslog.levels)
emerg: Log;
alert: Log;
crit: Log;
error: Log;
warning: Log;
notice: Log;
info: Log;
debug: Log;
}
const declareWinstonLogger: LogBuilder<WinstonLogger, WinstonOptions> = (options) => {
return ...;
}
请注意, WinstonLogger
使用泛型类型WinstonOptions
。
LogBuilder
中有没有办法从泛型类型T<U>
推断U
,这样我就不需要在LogBuilder<WinstonLogger, WinstonOptions>
中指定第二种类型?
我知道我可以将LogBuilder
定义为U
的默认值LoggerOptions
:
export type LogBuilder<
T extends Logger<U>,
U extends LoggerOptions = LoggerOptions
> = (options: U) => T;
我知道 Typescript 有一个infer
关键字,我试图解决这个问题没有成功。 我希望有某种方法可以将这些结合起来,以消除在LogBuilder
中声明第二种泛型类型的需要,并将其默认设置为WinstonOptions
,并且将上述LogBuilder
定义默认为LoggerOptions
- 这可能吗?
infer
关键字应该在这里工作。
export type LogBuilder<
T extends Logger<any>,
> = (options: T extends Logger<infer U> ? U : never) => T;
我们可以在options
参数的条件类型中从Logger
中提取类型U
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.