![](/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.