迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > TypeScript >

在 TypeScript 中将函数作为参数传递

作者:迹忆客 最近更新:2022/12/05 浏览次数:

要将函数键入为参数,请键入函数的参数列表及其返回值,例如 doMath: (a: number, b: number) => number。 如果函数的定义变得太繁琐,将函数类型提取到类型别名中。

function wrapper(
  a: number,
  b: number,
  // 👇️ function parameter
  doMath: (a: number, b: number) => number,
) {
  return doMath(a, b);
}

// 👇️ Define a function that matches
// expected parameter type
function sum(a: number, b: number) {
  return a + b;
}

console.log(wrapper(10, 20, sum)); // 👉️ 30

// 👇️ Define a function that matches
// expected parameter type
function multiply(a: number, b: number) {
  return a * b;
}

console.log(wrapper(10, 20, multiply)); // 👉️ 200

我们创建了一个带有 3 个参数的函数 - 2 个数字和一个函数。

包装函数使用数字调用传入的函数并返回结果。

包装函数需要一个函数参数,该参数将 2 个数字作为参数并返回一个数字。

summultiply 函数符合预期的类型,因为它们都将 2 个数字作为参数并返回一个数字。

如果我们的函数定义变得太繁琐,我们可以将函数类型提取到类型别名中。

type LogFunction = ({
  name,
  country,
}: {
  name: string;
  country: string;
}) => void;

function wrapper(
  obj: { name: string; country: string }, logger: LogFunction
) {
  logger(obj);
}

const logger: LogFunction = (obj) => {
  console.log(obj);
};

wrapper({ name: 'Tom', country: 'Chile' }, logger);

我们为一个函数定义了一个类型别名,它接受一个对象作为参数并且不返回一个值。

请注意 ,在键入包装函数和定义记录器函数时重用了类型别名。

如果我们已经定义了将作为参数传递的函数,请在键入包装函数的参数列表时使用 typeof 运算符来推断其类型。

const sum = (a: number, b: number): number => {
  return a + b;
};

function wrapper(a: number, b: number, doMath: typeof sum) {
  return doMath(a, b);
}

console.log(wrapper(10, 15, sum)); // 👉️ 25

因为我们已经声明了 sum 函数,所以我们不必在包装函数的参数列表中键入它。

typeof 运算符可用于引用特定函数的类型。

如果我们尝试传递与预期类型不匹配的函数参数,则会出现错误。

const sum = (a: number, b: number): number => {
  return a + b;
};

function wrapper(a: number, b: number, doMath: typeof sum) {
  return doMath(a, b);
}

console.log(wrapper(10, 15, sum)); // 👉️ 25

function test() {}

// ⛔️ Error: Argument of type '() => void' is not
// assignable to parameter of type
// '(a: number, b: number) => number'.
console.log(wrapper(10, 15, test)); // 👉️ 25

我们传递给包装函数的函数参数与预期类型不匹配,因此类型检查器抛出错误。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 TypeScript 中返回一个 Promise

发布时间:2023/03/19 浏览次数:182 分类:TypeScript

本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便