Web-TypeScript数据类型

基本类型

        Typescript 允许我们将类型分配给变量,以便编译器检查我们没有为变量分配错误的值。您应该熟悉您学习过的其他语言的类型检查,例如 C# 或 Java。Typescript 类型声明的一个简单示例如下所示。

var num : number = 23;

        这里的“:”符号用于引入类型声明“数字”,这是 Typescript 中的基本类型之一。这意味着无论在哪里使用变量 num,Typescript 编译器都会检查是否为变量分配了一个数字,如果没有,则给出错误。

        在Typescript(和JavaScript)中,基本类型是:

        boolean - true或false
        number - 整数或浮点数(两者都可以)
        string - 常规字符串
        any - 可以是任意类型
        void - 没有值(类似于C#和Java中的void函数)
        never - 用于永远不返回的函数
        null - JavaScript的空值
        undefined - JavaScript的未定义值

        null和undefined类型实际上是其他类型的子类型。它们的存在允许我们在单独查看联合类型时指定是否允许使用null或undefined作为值。

        还有描述JavaScript结构的结构类型:

数组

        数组可以声明为包含一种类型的元素,例如

 var ilist : number[] = [1, 2, 3];

元组

        元组是一个固定长度的数组,可能具有不同的元素类型,例如

  var tup : [number, string]= [23, "abc"];

枚举(Enum)

        枚举类似于C#或Java,并允许我们声明一个具有一组允许值的类型,例如:

enum Status {running, paused, stopped, finished};
var myStatus: Status = Status.paused;

类型断言(Type Assertions)

        除了使用类型声明(如上面的示例)之外,我们还可以使用类型断言。断言意味着程序员比类型系统更清楚。它允许程序员添加对编译器不明确的类型信息。这在Typescript中非常有用,因为它必须与无类型的JavaScript兼容。它允许程序员对无类型代码的类型进行“断言”。
        类型断言有两种形式:

<thetype> myvar
myvar as thetype

        它们在功能上是相同的。例如,假设我们有一个字符串:

扫描二维码关注公众号,回复: 17354054 查看本文章
  var myString = "hello world" // a Javascript declaration

        我们可以通过两个 Typescript 语句中的任何一个以很好的类型化方式在代码中获取字符串的长度:

var stringLength1 : number = (<string> mystring).length;
var stringLength2 : number = (mystring as string).length;

        请注意,我们必须插入括号以确保类型断言仅应用于变量。类型断言与类型转换相关,我们将在本主题后面介绍。

块级作用域 - let语句

        最后,在这个部分中,我们需要解释一下let语句。在下面的示例中,您将看到let语句始终代替var语句使用。在Typescript中,let语句用于对变量施加更严格的作用域限制。实际上,let语句使变量的行为更像您在C#或Java中习惯的行为。一个区别的示例是以下完全有效的JavaScript代码序列:

n = 23;
var n;

        在您习惯的语言中,这会导致错误,因为在找到第一个语句时不会声明变量。JavaScript 有一个更奇特的范围界定行为,你将在下面的活动中看到。let 语句从传统的类型语言角度纠正了这种行为。例如,以下代码序列将导致编译器语法错误。

n = 23; // syntax error because n is not declared before here
let n;

        从现在开始,我们将使用 let 语句在我们的示例中声明变量。

        对于永不更改的变量,有一种特殊形式的 let 语句。这是常量语句。假设我们有以下声明。

const n = 23;

        在这里,我们声明一个变量 n,该变量初始化为值 23。它与使用 var 或 let 语句创建的变量不同,因为 Typescript 将阻止在声明后为其分配任何其他值。如果尝试对值的更改进行编码,编译器将显示错误。

复杂数据类型

        Typescript引入了一些有趣的数据结构,我们可以在我们的程序中使用。现在我们来看一下枚举、数组和元组数据类型。

枚举

        枚举声明了一组可以用于变量内容的符号。在Typescript和其他语言中,这些变量映射到整数值,但这些整数值在程序中是隐藏的,程序中使用有意义的标识符进行编程。
下面的枚举为Color数据类型定义了一些符号:

enum Colour {red, white, blue, yellow};

        我们可以声明一个变量并初始化它,如下所示:

let col:Colour = Colour.yellow;

        到目前为止,这类似于 C# 或 Java 中的枚举。但是,Typescript 中有一些独特的行为。请考虑以下您希望工作的 if 语句:

if (col == Colour.red) { … }

        这将给出一个 Typescript 语法错误“== 运算符不能应用于类型 Color.yellow 和 Color.red”。在这种情况下,当您期望两个枚举值具有可比性时,Typescript 似乎会给出错误。有一些技术原因导致情况并非如此。我们必须比较枚举变量的方法是使用它们的数值等价物。例如,我们可以更改上面的 if 语句来消除问题:

if (col == <number>Colour.red) { … }

        这里的<number>语法是将枚举值转换为数字类型的类型转换。在需要进行比较的情况下,例如在switch语句中,您需要进行这样的转换。

数组

        Typescript 还对数组类型使用特殊语法。简单的一维数值数组可以声明如下:

let luckyNumbers: number[] = [7, 8, 23, 88];

        这是用于任何类型的数组的形式。你可能还记得 JavaScript 允许数组中的任何类型的元素。Typescript 没有,它检查所有元素是否为同一类型。

        我们还可以初始化一个数组对象,其中不存储任何对象。为此,我们可以使用 Array 类,它类似于 Java Array 类。例如:

let array1: string[] = new Array(4); // new array with slots for 4 elements
let array2: string[] = new Array(0); // new array with slots for zero elements

        第二个示例反映了与其他语言不同的JavaScript数组的结构。JavaScript 数组的大小可以通过简单地将数据存储在新索引中来自动更改。您使用的其他语言将对数组强制使用固定大小,并在超出固定大小使用索引时产生运行时错误。

元组

        更灵活的类型是元组。这是一种描述对象的类型,这些对象内部可能声明了几种不同的类型。它们描述了一个固定长度的JavaScript数组。一个简单的例子是: 
let student1 : [string, number] = ["Reza",23];

        此变量中的值始终有两个元素,第一个是字符串,第二个是数字。要访问这些值,我们使用数组访问语法,如以下两个语句所示:

console.log(student1[0]); // prints “Reza” on console log
student1[0]="Baz"; // changes the first value to the string “Baz”

        这看起来类似于JavaScript,但Typescript检查类型以确保索引和元素的类型是应有的。例如,以下语句将生成类型错误:

student1[0] = 17; // type error – must be a string

猜你喜欢

转载自blog.csdn.net/qq_54813250/article/details/133514181