TypeScript:掌握泛型,让你更好的进行类型校验

您好,我是沧沧凉凉,是一名前端开发者,目前在掘金知乎以及个人博客上同步发表一些学习前端时遇到的趣事和知识,欢迎关注。


我个人觉得TypeScript既保留了JavaScript的脚本语言的灵活性,又给JavaScript添加了静态语言才有的各种代码提示,虽然TypeScript独有的那一部分即是是编辑器报错,但是代码依然能够执行,依然能够编译。

比如说下面的代码:

正是因为TypeScript虽然有静态类型那么强大的提示,而且就算是类型报错也能进行编译,还有any这个类型,所以对于一个没有接触过TypeScript的人来说,上手起来并没有那么困难,但是要用好确实不容易,因为TypeScript更新迭代的速度非常快,新特性更新的速度比JavaScript一年出一次可快了太多。

但你只要按照编辑器的提示,解决这些报错,那么你代码中的潜在BUG会减少太多太多了,正如我上篇文章中提到的一样:TypeScript:为什么不要用any声明类型

而在TypeScript中还有一个泛型的概念,甚至TypeScript还能够通过你传入的参数类型去推导出泛型。

为什么要泛型

可以看到,因为类型校验的存在,该函数设定的是传入number类型,返回的也是一个number类型,但是如果你想要传入string类型时,你就需要再定义一个函数,这会出现重复代码,那么有没有一个办法,让返回值根据传入的类型来进行判断呢?

它的答案就是使用泛型。

在TypeScript中,如果你使用了泛型,TypeScript是可以根据你传入的值,自动的推导泛型是什么类型,就比如下面的

实际使用

响应数据类型

在使用到TypeScript的项目中,网络请求的返回结果是要进行类型声明的,一般来讲,后端返回的数据类型中,只有data的类型是不固定的,所以这个时候我们就需要使用到泛型来声明一个通用的返回类型:

泛型组件

React的JSX和TypeScript是绝配,他们两个搭配在一起就叫做TSX,而React的组件也是可以进行声明泛型的。

这样进行声明后,你在使用该组件的时候就可以得到正确的数据类型,

泛型校验

有时候我们想对泛型进行校验,验证传入的类型中必须包含某些属性,这种情况我们可以使用extens关键字。

最后

虽然泛型和any具有相同的功能,但是any无法正确的获得类型提示,而泛型可以正确的获得类型提示,在使用TypeScript中,泛型是一个必须要进行掌握的技能,因为使用TypeScript就是冲着它的类型提示,如果全部使用any或者object进行声明,那不如使用JavaScript。