Typescript基础6

101 阅读3分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

这是typescript学习的系列课程,今天开启typescript的第6篇。

不多说废话,直接精简出最精华的部分给大家。

如果有朋友对于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,以上为今天对于函数中构造签名以及参数的基本使用的讲解。

学如逆水行舟,不进则退。第一天不求贪多,只求稳步的进步。