除了上面所介绍的基础数据类型外,TypeScript中还可以使用一些高级数据类型,如泛型、交叉类型、联合类型。
TypeScript中引入了C#中的泛型(Generic),泛型解决类、接口、方法的复用性及对不特定数据类型的支持。
泛型类可以支持不特定的数据类型,要求传入的参数和返回的参数必须一致,T表示泛型,具体是什么类型在调用这种方法时才决定,如代码示例4-22所示。
代码示例4-22
泛型接口如代码示例4-23所示。
代码示例4-23
通过泛型类可以定义一个操作数据库的库,支持MySQL、MS-SQL、MongoDB,要求MySQL、MS-SQL、MongoDB功能一样,都有add、update、delete、get方法,如代码示例4-24所示。
代码示例4-24
交叉类型(Intersection Types)是将多种类型合并为一种类型。这可以把现有的多种类型叠加到一起而成为一种类型,它包含了所需的所有类型的特性。交叉类型包含A的特点,也包含B的特点,伪代码表示就是A&B。
下面定义了两种类型:Person和Student,变量student的类型是Person和Student的交叉类型,student的类型必须满足两种类型的交叉组合体要求,如代码示例4-25所示。
代码示例4-25
同时Person&Student可以使用类型别名,下面代码中定义的StudentInfo就是Person&Student的类型别名,如代码示例4-26所示。
代码示例4-26
联合类型(Union Types)既可以是A,也可以是B,伪代码表示就是A|B,如代码示例4-27所示。
代码示例4-27
上面的type的类型就是number和boolean的联合类型,type的值是这两种类型中的一种,下面定义了一种由字面量类型组合成的一个新的联合类型,如代码示例4-28所示。
代码示例4-28
字面量联合类型的形式与枚举类型有些类似,所以,如果仅使用数字,则可以考虑是否使用具有表达性的枚举类型。