一文学懂TypeScript的类型(3)
在JavaScript中,有时候变量会是有几种类型之中的一种。要描述这些变量,可以使用 union types。例如,在下面的代码中,x 是 null 类型或 number 类型:
x 的类型可以描述为 null | number:
类型表达式 s | t 的结果是类型 s 和 t 在集合理论意义上的联合(正如我们之前看到的那样,两个集合)。 下面让我们重写函数 stringify123():这次我们不希望参数 callback 是可选的。应该总是调用它。如果调用者不想传入一个函数,则必须显式传递 null。实现如下。
请注意,在行 B 进行函数调用之前,我们必须再次检查 callback 是否真的是一个函数(行A)。如果没有检查,TypeScript 将会报告错误。 Optional 与 undefined|T 类型为 T 的可选参数和类型为 undefined|T 的参数非常相似。 (另外对于可选属性也是如此。) 主要区别在于你可以省略可选参数:
But you can’t omit parameters of type 但是你不能省略 undefined|T 类型的参数:
值 null 和 undefined 通常不包含在类型中 在许多编程语言中,null 是所有类型的一部分。例如只要 Java 中的参数类型为 String,就可以传递 null 而Java 不会报错。 相反,在TypeScript中,undefined 和 null 由单独的不相交类型处理。如果你想使它们生效,必须要有一个类型联合,如 undefined|string 和 null|string。 对象 与Arrays类似,对象在 JavaScript 中扮演两个角色(偶尔混合和/或更加动态):
我们将在本文章中忽略 object-as-dictionaries。顺便说一句,无论如何,map 通常是比字典的更好选择。 通过接口描述 objects-as-records 接口描述 objects-as-records 。例如:
TypeScript 类型系统的一大优势在于它的结构上,而不是在命名上。也就是说,接口 Point 能够匹配适当结构的所有对象:
相比之下,Java 的标称类型系统需要类来实现接口。 可选属性 如果可以省略属性,则在其名称后面加上一个问号:
方法 接口内还可以包含方法:
类型变量和泛型类型 使用静态类型,可以有两个级别:
同理:
普通变量通过 const,let 等引入。类型变量通过尖括号( <> )引入。例如以下代码包含类型变量 T,通过 <T> 引入。
(编辑:ASP站长网) |