本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
这是typescript学习的系列课程,今天开启typescript的第6篇。
不多说废话,直接精简出最精华的部分给大家。
如果有朋友对于typescript的基础不是很了解的话,欢迎点击下面两篇文章跳转进行学习。
接前面两篇:
- Typescript基础一,这一篇介绍了如何执行typescript文件,以及类型注解的例子。
- Typescript基础二,这一篇介绍了typescript在函数中的一些基础使用。
- Typescript基础三,这一篇介绍了typescript联合类型的相关知识点。
- Typescript基础四,这一篇介绍了typescript交叉类型、类型断言、字面量类型等知识。
- Typescript基础五,这一篇介绍了typescript函数基础知识的分享。
我们接着函数类型的知识,今天是它的强化版。
构造签名
我们在用js工作的时候,使用构造函数的时候应该挺多的吧。而这里的构造签名其实就是对构造函数的约束而使用的。
举个例子:
class Person2 {}
interface ICTORPerson {
new (): Person2
}
function factory(fn: ICTORPerson) {
const f = new fn()
return f
}
factory(Person2)
这里定义了一个类Person2,同时定义了一个接口ICTORPerson,这个接口是个可以实例化的函数,且返回值是Person2类型。所以我们在定义的函数factory中,可以对入参fn进行实例化的操作。
接下来讲一下参数的使用吧。
参数的使用
可选参数
首先可选参数的意思是:比如有一个参数在传入参数的时候,某一个参数可以不传或者为空的情况,老子如下:
function foo(x: number, y?: number) {
console.log(x, y);
}
这里的参数y就是可选参数。
参数默认值
我们在用js的时候,也遇到过设置参数默认值的情况。
在ts中,一般以下两种参数可以设置默认值。
1、有默认值的情况下, 参数的类型注解可以省略 2、有默认值的参数, 是可以接收一个undefined的值
例子如下:
// 定义函数
function foo(x: number, y = 100) {
console.log(y + 10)
}
// 执行函数
foo(10)
foo(10, undefined)
这里可以看到,这里的参数y就设置了参数默认值。所以我在调用这个函数的时候,既可以传undefined,也可以不传这个参数。
剩余参数
这个知识点在js中比较常用到。就是我们通过会用...obj的这种方式表示这个函数的所有入参。
那么类似的问题在ts中又该怎么表示呢?
例子如下:
function foo(...args: (string | number)[]) {}
foo(123, 321)
foo("abc", 111, "cba")
这里表示参数是string或者number的一个集合。
ok,以上为今天对于函数中构造签名以及参数的基本使用的讲解。
学如逆水行舟,不进则退。第一天不求贪多,只求稳步的进步。