簡體   English   中英

根據先前參數的泛型類型推斷參數類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM