本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
这是typescript学习的系列课程,今天开启typescript的第5篇。
不多说废话,直接精简出最精华的部分给大家。
如果有朋友对于typescript的基础不是很了解的话,欢迎点击下面两篇文章跳转进行学习。
接前面两篇:
- Typescript基础一,这一篇介绍了如何执行typescript文件,以及类型注解的例子。
- Typescript基础二,这一篇介绍了typescript在函数中的一些基础使用。
- Typescript基础三,这一篇介绍了typescript联合类型的相关知识点。
- Typescript基础四,这一篇介绍了typescript交叉类型、类型断言、字面量类型等知识点。
接下来我们看学习一些稍微复杂的知识。
函数类型的表示方式
一般我们写函数的时候常用的方式是以下这种,比如我定义一个加法计算的方法,并且给这个函数定义数据类型,如下所示:
type IaddFuncType = (num1: number, num2: number) => number;
// 函数定义
function calc(func: IaddFuncType) {
return func(10, 20);
}
function add(num1: number, num2: number): number {
return num1 + num2;
}
// 函数执行
const result = calc(add);
console.log('最后获取的结果>>>>>', result);
以上,我先定义一个函数的类型约束IaddFuncType,然后定义函数calc,它的参数是一个函数func,并且这个函数func复合类型IaddFuncType的约束。
最后我传入了一个函数add,并且返回执行了这个函数,获得了结果result。以上就是对普通函数约束的TS写法。
好,我们接着看函数的调用签名知识。
函数调用签名
前面的例子我们用的是:使用函数类型表达式来约束普通函数。但是我接下来要讲的是比较特殊的一种,叫做函数调用签名。
他的产生一般是在描述函数作为对象可以被调用, 同时也有其他属性时, 这个时候使用函数调用签名。
不多说,我直接举个例子来说明一下。
// 定义一个接口
interface IBar {
name: string
age: number
// 函数可以调用: 函数调用签名
(num1: number): number
}
// 给函数增加约束
const bar: IBar = (num1: number): number => {
return 123
}
// 执行函数
bar.name = "aaa"
bar.age = 18
bar(123)
这个时候可以看到IBar的这个接口类型,同时具有属性name和age,它本身又是一个函数,这种情况在我们的工作中常常会碰到,是比较常见的。
ok,以上为今天对于函数基础知识的分享。
学如逆水行舟,不进则退。第一天不求贪多,只求稳步的进步。