欢迎光临散文网 会员登陆 & 注册

TypeScript 类型基础——复杂类型

2023-07-20 15:02 作者:没用软件开发日记  | 我要投稿

联合类型

    TypeScript中的类型系统不仅让我们能为字段声明某一种类型,还可以声明为多种类型的联合。

    最基本的联合类型声明入上所示,和普通的字段声明一致类型描述在字段名冒号后,只不过多个独立类型之间用竖线隔开,得到的效果是字段a不仅仅可以被赋予string类型的值还可以被赋予数字型、布尔型的值,各个类型无法同时生效(因为字段一次只能被赋予一个类型的值)体现为的关系。

    这有什么用?前端编程一直以来都是js的天下,作为一种弱类型语言大多数工程师很喜欢将类型判断放在运行时,我们会给一个业务处理函数传入各种各样的东西,在处理函数内部辨别参数类型执行不同的逻辑,通常我们对页面层提供给js逻辑的数据的态度是宽松的,我们需要“接口适配器”「1」来规范业务逻辑收到的数据模型,联合类型能在接口适配器发挥出良好的作用(接收一个灵活类型的参数返回一个固定类型的数据模型),这样既兼顾了js灵活的语言风格又对业务侧提供了健壮的类型检查,没有比这更好的事情了。

    简单类型可以联合,复杂类型也是一样的:

    这里user同时获得了两种类型,但是两种类型同一时间只能有一个生效,也就是说赋给user的值要么是A类型要么是B类型。

   type同interface一样也可以如上使用:

    同时type可以用来表示某种常用联合类型的缩写:

    这样myType作为某个前端自有领域的通用语言再合适不过了,省去了冗长的类型编写带来的风险和多次重复的类型声明导致的维护成本增加。

通过索引访问

    JS对象有种神奇的特征,我们除了可以使用a.b访问对象a种的b字段还可以使用a['b']访问a种的b字段,TS也为这种访问方式设计了响应的类型系统。

    上面的例子给我们展示了通过索引的方式声明对象的方法,Index接口中规定索引只能是数字型或者字符型中的一种,并且通过索引访问到的字段返回值都是string,这里要说一个js的隐含机制,当使用非数字作为索引去访问对象时其实会将数字隐式的转化为字符串再去访问对象,也就是说我们所写的所有类型的索引访问描述都要能与其中的字符串索引兼容:

    同理基于索引的访问机制也要可以和直接指定字段的访问兼容:

    这个例子中我们将通过索引访问的方式返回值都标记为字符型,所以通过字段名直接访问也应该拿到和索引取值一样的结果,也就是说通过字段名直接访问我们获得的也是字符型,age却将自己描述为数值型,这样就产生了异常。


下一篇记录一下类型拓展。

TypeScript 类型基础——复杂类型的评论 (共 条)

分享到微博请遵守国家法律