在 TypeScript 中将函数作为参数传递
要将函数键入为参数,请键入函数的参数列表及其返回值,例如 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 个数字作为参数并返回一个数字。
sum
和 multiply
函数符合预期的类型,因为它们都将 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
我们传递给包装函数的函数参数与预期类型不匹配,因此类型检查器抛出错误。
相关文章
在 AngularJs 中设置 Select From Typescript 的默认选项值
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程提供了在 AngularJs 中从 TypeScript 中设置 HTML 标记选择的默认选项的解释性解决方案。
在 Angular 中使用 TypeScript 的 getElementById 替换
发布时间:2023/04/14 浏览次数:153 分类:Angular
-
本教程指南提供了有关使用 TypeScript 在 Angular 中替换 document.getElementById 的简要说明。这也提供了在 Angular 中 getElementById 的最佳方法。
在 TypeScript 中使用 try..catch..finally 处理异常
发布时间:2023/03/19 浏览次数:181 分类:TypeScript
-
本文详细介绍了如何在 TypeScript 中使用 try..catch..finally 进行异常处理,并附有示例。
在 TypeScript 中使用 declare 关键字
发布时间:2023/03/19 浏览次数:97 分类:TypeScript
-
本教程指南通过特定的实现和编码示例深入了解了 TypeScript 中 declare 关键字的用途。
在 TypeScript 中 get 和 set
发布时间:2023/03/19 浏览次数:172 分类:TypeScript
-
本篇文章演示了类的 get 和 set 属性以及如何在 TypeScript 中实现它。
在 TypeScript 中格式化日期和时间
发布时间:2023/03/19 浏览次数:161 分类:TypeScript
-
本教程介绍内置对象 Date() 并讨论在 Typescript 中获取、设置和格式化日期和时间的各种方法。
在 TypeScript 中返回一个 Promise
发布时间:2023/03/19 浏览次数:182 分类:TypeScript
-
本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。
在 TypeScript 中定义函数回调的类型
发布时间:2023/03/19 浏览次数:221 分类:TypeScript
-
本教程说明了在 TypeScript 中为函数回调定义类型的解决方案。为了程序员的方便和方便,实施了不同的编码实践指南。
在 TypeScript 中把 JSON 对象转换为一个类
发布时间:2023/03/19 浏览次数:110 分类:TypeScript
-
本教程演示了如何将 JSON 对象转换为 TypeScript 中的类。