本博文为阅读笔记,供个人复习备忘用
数据类型
TypeScript 中的数据类型有Undefined
、Number
(数值类型)、string
(字符串类型)、Boolean
(布尔类型)、enum
(枚举类型)、any
(任意类型)、void
(空类型)、Array
(数组类型)、Tuple
(元祖类型)、Null
(空类型)。
JavaScript 中的数据类型有Undefined
、Number
(数值类型)、string
(字符串类型)、Boolean
(布尔类型)、null
、Object
(引用类型)。
通过上面的对比,我们可以看到 TypeScript 相对于 JavaScript 增加了新的数据类型。这些新增的数据只用于 TypeScript 环境下,当 TypeScript 编译成 JavaScript 的时候,会去掉 TypeScript 中的新类型转变成 JavaScript 中的数据类型。
1、Undefined 类型
当定义了一个变量,没有给这个变量进行赋值,那这个变量中有一个默认值 undefined,undefined
就是 Undefined
类型。
let a: number;
console.log(a); //输出undefined
2、Number 类型
和JavaScript一样,TypeScript里的所有数字都是浮点数。 这些浮点数的类型是 number
。
let b: number = 10;
let c: number = 2.13
在 TypeScript 中存在以下几种特殊的 Number 类型数据:
NaN
:不是数字(Not a Number)。如果一个计算结果或者函数的返回值本应该是数字,但是不是数字,在 TypeScript 中并不会报错,而是把它的结果设置成NaN;nfinity
:正无穷大;-Infinity
:负无穷大。
3、string 字符串
由单引号''
或者双引号""
括起来的一串字符就是字符串。
let d: string = "lanbots"; //输出 lanbots
let e: string = 'linbots'; //输出 linbots
你还可以使用模版字符串,它可以定义多行文本和内嵌表达式。 这种字符串是被``
包围 ,并且以${ expr }
这种形式嵌入表达式
let name: string = "lanbots";
let age: number = 23;
let sentence: string = `my name is ${ name }.
I'll be ${ age + 1 } years old next month.`;
这与下面定义sentence的方式效果相同:
let sentence: string = "my name is " + name + ".\n" +
"I'll be " + (age + 1) + " years old next month.";
4、boolean 布尔类型
在程序中我们经常碰到这样的情况:判断条件是否成立,判断对错。这样的结果无非就是两种情况:是,否。表示这种情况的变量就是布尔类型(boolean
),其数值有 true
和 false
。
let a: boolean = false;
let b: boolean = true;
5、enum 枚举
当出现以下这种情况:
- 表示饮料杯的类型:小杯、中杯、大杯,有三种结果;
- 表示彩虹的颜色:赤橙黄绿青蓝紫,有七种结果;
- 表示四季:春夏秋冬,有四种结果。
这种变量的结果可能是固定的几种数据,我们使用枚举类型表示。
//表示四季这种情况 定义一个枚举类型的变量 定义枚举的关键字是enum
//一般枚举类型的变量 用大写字母表示
enum SEASON{
SPR,//结果一般也用大写字母表示
SUM,//结果之间用逗号隔开
AUT,
WIN
}
console.log(SEASON.SPR);//0
enum CUP_TYPE{
//在ts中会给每一个可能的结果赋值一个整数 方便在计算机中存储和使用 默认是0
SMALL_CBIG_CUP_TYPE = 1,
MID_CUP_TYPE,//2
BIG_CUP_TYPE // 3
}
console.log( CUP_TYPE.MID_CUP_TYPE);
6、Any
有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。 这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。 这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。 那么我们可以使用 any
类型来标记这些变量:
let a: any;
a = 23;
a = "lanbots";//a可以再次赋值任意类型的值
console.log(a); //输出lanbots
7、Void
某种程度上来说,void
类型像是与any
类型相反,它表示没有任何类型。 当一个函数没有返回值时,你通常会见到其返回值类型是 void
:
function warnUser(): void {
alert("This is my warning message");
}
声明一个void
类型的变量没有什么大用,因为你只能为它赋予undefined
和null
:
let unusable: void = undefined;
8、Never
never
类型表示的是那些永不存在的值的类型。 例如, never
类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never
类型,当它们被永不为真的类型保护所约束时。
never
类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never
的子类型或可以赋值给never
类型(除了never
本身之外)。 即使 any
也不可以赋值给never
。
9、类型断言
有时候你会遇到这样的情况,你会比TypeScript更了解某个值的详细信息。 通常这会发生在你清楚地知道一个实体具有比它现有类型更确切的类型。
通过类型断言这种方式可以告诉编译器,“相信我,我知道自己在干什么”。 类型断言好比其它语言里的类型转换,但是不进行特殊的数据检查和解构。 它没有运行时的影响,只是在编译阶段起作用。 TypeScript会假设你,程序员,已经进行了必须的检查。
类型断言有两种形式。 其一是“尖括号”语法:
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
另一个为as语法:
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
两种形式是等价的。 至于使用哪个大多数情况下是凭个人喜好;然而,当你在TypeScript里使用JSX时,只有 as语法断言是被允许的。