对于有JavaScript基础的同学来说,入门打印稿其实很容易,只需要简单掌握其基础的类型系统就可以逐步将JS应用过渡到TS应用。
//js const双=(num)=比;2 * num//ts const双=(num:数字):数量=比;2 * num
然而,当应用越来越复杂,我们很容易把一些变量设置为任何类型,打印稿写着写着也就成了AnyScript。为了让大家能更加深入的了解打印稿的类型系统,本文将重点介绍其高级类型,帮助大家摆脱AnyScript。
在讲解高级类型之前,我们需要先简单理解泛型是什么。
泛型是强类型语言中比较重要的一个概念,合理的使用泛型可以提升代码的可复用性,让系统更加灵活。下面是维基百科对泛型的描述:
泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。
泛型通过一对尖括号来表示(<代码> & lt;祝辞> 代码),尖括号内的字符被称为类型变量,这个变量用来表示类型。
函数copyT (arg: T): { 如果(typeof arg==='对象'){ 返回JSON.parse ( JSON.stringify (arg) ) 其他}{ 返回参数 } }
这个类型T,在没有调用复制函数的时候并不确定,只有调用复制的时候,我们才知道T具体代表什么类型。
const str=copy(我的名字是打印稿)
我们在VS代码中可以看到复制函数的参数以及返回值已经有了类型,也就是说我们调用复制函数的时候,给类型变量T赋值了字符串。其实,我们在调用复制的时候可以省略尖括号,通过TS的类型推导是可以确定T为字符串的。
除了字符串、数字、布尔这种基础类型外,我们还应该了解一些类型声明中的一些高级用法。
<强>交叉类型(,)强>
交叉类型说简单点就是将多个类型合并成一个类型,个人感觉叫做“合并类型”更合理一点,其语法规则和逻辑“与”的符号一致。
<代码> T,U 代码>
假如,我现在有两个类,一个按钮,一个超链接,现在我需要一个带有超链接的按钮,就可以使用交叉类型来实现。
界面按钮{ 类型:字符串 文本:字符串 } 接口链接{ alt:字符串 href:字符串 } const linkBtn:按钮,链接={ 类型:“危险”, 文本:“跳转到百度”, alt:“跳转到百度”, href:“http://www.baidu.com” }
<>强联合类型(|)强>
联合类型的语法规则和逻辑“或”的符号一致,表示其类型为连接的多个类型中的任意一个。
<代码> T | U 代码>
例如,之前的按钮组件,我们的类型属性只能指定固定的几种字符串。
界面按钮{ 类型:“违约”|“初级”|“危险” 文本:字符串 } const btn:按钮={ 类型:“主”, 文本:“按钮的 }
<强>类型别名(类型)强>
前面提到的交叉类型与联合类型如果有多个地方需要使用,就需要通过类型别名的方式,给这两种类型声明一个别名。类型别名与声明变量的语法类似,只需要把<代码> const 代码>,<代码>让代码> 换成<代码> 代码>型关键字即可。
<代码>类型别名=T | U 代码>
InnerType类型=澳稀眧“初级”|“危险” 界面按钮{ 类型:InnerType 文本:字符串 } 界面提醒{ 类型:ButtonType 文本:字符串 }
<强>类型索引(keyof) 强>
<代码> keyof> 代码类似于<代码>对象。键> 代码,用于获取一个接口中关键的联合类型。
界面按钮{ 类型:字符串 文本:字符串 } 类型ButtonKeys=keyof按钮//等效于 ButtonKeys类型=袄嘈汀眧“文本”