具有类型别名的泛型

Generic with a type alias

我正在尝试为 TypeScript 中的异步测试创建一个模拟函数。 我的函数接收一些数据,并且 returns 它在 promise 解析时收到。

我知道我可以这样输入:

type Options<T> = {
  data: T;
};

export const mockApiCall = async <T>({ data }: Options<T>): Promise<{ data: T }> => {
  return new Promise((resolve) => {
    setTimeout(() => resolve({ data }), 100);
  });
};

但我想在函数名中使用类型别名,如下所示:

type Options<T> = {
  data: T;
};

type MockData<T> = (options: Options<T>) => Promise<{ data: T }>;

export const mockApiCall: MockData<T> = async ({ data }) => {
  return new Promise((resolve) => {
    setTimeout(() => resolve({ data }), 100);
  });
};

但是 returns 错误 Cannot find name 'T'.ts(2304)

正确的语法是什么?

您可以试试这个代码:

type Options<T> = {
  data: T;
};

export const mockApiCall = async <T>({ data }: Options<T>) => {
  return new Promise<Options<T>>((resolve) => {
    setTimeout(() => resolve({ data }), 100);
  });
};

您的泛型类型参数的放置有误。你想要一个泛型函数(类型参数在函数上)而不是一个恰好是函数的泛型类型。不同之处在于泛型函数的类型参数在调用时决定。泛型类型需要在使用时确定其类型参数。

type Options<T> = {
  data: T;
};

type MockData = <T>(options: Options<T>) => Promise<{ data: T }>;

export const mockApiCall: MockData = async ({ data }) => {
  return new Promise((resolve) => {
    setTimeout(() => resolve({ data }), 100);
  });
};

Playground Link