以下 TypeScript 表达式是什么意思?

Cod*_*orm 1 types typescript

我想知道以下表达式(<T = string>() => Promise<T>)在以下上下文中是什么意思:

type Src = string | (<T = string>() => Promise<T>);
Run Code Online (Sandbox Code Playgroud)

并用于以下功能:

const handleSource = async (source: Src): Promise<void> => {
    if (typeof source === 'string') {
      setState((s) => ({ ...s, src: source }));
      return;
    }

    try {
      const result = await source();
      setState((s) => ({ ...s, src: result }));
    } catch (e) {
      // eslint-disable-next-line no-console
      console.warn('[Image] handleSource', e);
      setState((s) => ({ ...s, isLoadingError: true }));
    }
  };
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 5

这意味着Src可以是

  • 一个字符串,或
  • 一个函数,它接受一个泛型参数T(默认为string)并使用该泛型参数返回一个承诺,表示如果承诺被履行,这就是履行值将具有的类型

例如,您可以有一个如下所示的函数:

function example1(src: Src) {
    if (typeof src === "string") {
        return src;
    }
    return src();
}
Run Code Online (Sandbox Code Playgroud)

...返回 astring或 a Promise<string>,或者像这样:

function example2(src: Src) {
    if (typeof src === "string") {
        return src;
    }
    return src<number>();
}
Run Code Online (Sandbox Code Playgroud)

...返回 astring或 a Promise<number>(因为调用 时使用了泛型类型参数src)。