前言
这是开始学习 Typescript 的一些笔记, 涉及的都是很基础的知识点. 大神们请绕路或者欢迎指点. 今天开始第一部分数据类型的学习.
数据类型
Typescript 中为了使代码编写更加规范, 更加易于维护. 增加了类型校验.
所谓类型校验: 就是定义的变量始终只能是定义时指定的数据类型. 也就是说定义变量的时候必须指定类型. 当然 typescript 也支持原生 JS 的写法.
比如: 我们将 a 定义成 number 类型, 如果我们在后面使用 a 时, 将其修改成了 string 类型. 那么会出现报错.
- let a:number = 12;
- a = 'hello' // 报错 Type '"hello"' is not assignable to type 'number'
Typescript 中常见的数据类型如下:
布尔类型 (boolean)
- let flag:boolean = false;
- console.log(flag)
- flag = true;
- flag = false;
在 typescript 中 boolean 类型的值只有两个 true 和 false. 不同于 JS 中, 非 0 的数值, 非空的字符串等都可以表示 true. 在 typscript 中将 boolean 类型的值赋值成 1,0 等会报错.
- let flag:boolean = true;
- flag = 1; // 报错: 在 JS 中 1 能够代表 true. 但是在 ts 中 1 表示 number 类型. 因此会出现错误.
数字类型 (number)
- let num:number = 12;
- num = 12.4444;
- console.log(num)
字符串类型 (string)
- let str:string = 'helloworld';
- console.log(str)
数组类型 (Array)
typescript 中定义数组有两种方式:
第一种定义数组的方式: 在元素类型后面接上 [], 表示由此类型元素组成的一个数组
- let arr1:number[] = [1,2,3];
- console.log(arr1)
- let arr2:string[] = ['hello','world'];
- console.log(arr2)
第二种定义数组的方式: 使用数组泛型, Array < 元素类型 >:
let arr3:Array<number> = [11,22,33];
元组类型 (tuple)
元组类型是数组类型的一种特例. 数组类型只允许元素是一种数据类型. 而元组类型允许元素是多种数据类型. 比如, 你可以定义一对值分别为 string 和 number 类型的元组.
- let tuple1:[string,number] = ['hello',12]
- console.log(tuple1[0])
但是, 元组类型和元素必须一一对应.
let tuple2:[string,number] = [20,'world'] // 没有一一对应
枚举类型 (enum)
在计算机科学中, 我们经常使用数值来表示一种状态. 但是对于较多的状态使用数值来表示可能导致易读性差. 比如十二生肖如果我们用 0,1,2,3,4...11 来表示, 那么可能根本不知道究竟每一个代表什么. 但是如果我们用有含义的单词来表示, 那么程序就比较容易理解与阅读. 比如看到猪我就知道这个生肖是猪. 枚举就是考虑到所有的可能出现的值, 然后用具有函数的单词来表示它.
枚举又可以成为一一列举, 在计算机计算中, 将一个有穷序列集所有可能的值列举出来就称为枚举. 比如: 星期可以使用 Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday 来进行枚举. 生肖可以使用龙, 蛇, 狗等十二种来进行枚举.
enum 枚举名 {
标识符 =[整型常数],
标识符 =[整型常数],
标识符 =[整型常数],
}
枚举类型的使用: 枚举类型如果没有指定值, 那么默认是从 0 开始.
- enum data {
- success,
- error
- }
- console.log(data.success) // 0
- console.log(data.error) // 1
如果指定了值, 那么从指定的值往下递增.
- enum data {
- pedding,
- success = 100,
- error
- }
- console.log(data.pedding) // 0
- console.log(data.success) // 100
- console.log(data.error) //101
任意类型 (any)
在 typescript 中定义变量时通常需要指定类型, 但是有时候我们可能不知道这个变量会是什么类型 (比如这个变量是用来接收后段发送过来的数据, 这个数据类型可能不太确定.). 这时候我们就可以指定 any 类型. 表示可以是任意类型.
- let anyVar:any;
- anyVar = 123;
- console.log(anyVar)
- anyVar = [1,2,3];
- console.log(anyVar)
另外, 当我们只知道一部分数据的类型时, any 类型也是有用的. 比如, 你有一个数组, 它包含了不同的类型的数据: 我们可以指定数组中元素类型为 any. 这样的话我们就可以随意地修改数组中的元素了.
- let list:any[] = [1,'hello',false];
- list[1] = true; // 将数组第二个元素从 string 类型修改为 boolean
- console.log(list[1])
Null 和 Undefined
null 和 undefined 是其他数据类型的子类型.
我们知道在 JS 中定义了变量但是赋值, 那么得到的就是 undefined. 比如:
- let u ;
- console.log(u) // undefined
但是在 ts 中, 如果我们定义了一个变量, 没有进行赋值. 如果我们使用它会出现报错. 比如:
- let u:number;
- console.log(u) // Variable 'u' is used before being assigned
但是很多情况下, 我们定义了一个变量没有进行赋值, 在后续我们需要根据这个变量是否有值来进行判断. 但是这种情况下就会报错. 因此: 我们希望能够
在没有获取值的情况下不会报错, 这时候就可以使用 undefined 了.
- let u2:number|undefined;
- console.log(u2)
- u2 = 123;
- console.log(u2)
同理 Null 类型也是为了处理值为 null 时的情况.
void 类型
void 类型表示没有任何类型, 一般用于定义方法的时候, 方法没有返回值.
- function warnUser(): void {
- console.log("This is my warning message");
- }
never 类型
never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型.
let a:never; a = (() => {throw new Error('抛出异常')})()
如果变量有确定的类型, 那么使用 never 类型就会报错. 比如:
定义变量 n 为 never 类型. 但是将 n 赋值为 number 类型了, 那么就会报错.
- let n1:never;
- n1 = 123;
Object 类型
object 类型表示非原始类型, 也就是除 number,string,boolean,symbol,null 或 undefined 之外的类型.
declare function create(o: object | null): void;
object 类型的值与 JS 中相同. 数组, 函数, null 等都可以是 Object 类型.
- create({
- prop: 0
- }); // OK
- create(null); // OK
- create([1,2,3]); // OK
- create(function(){
- }) // OK
- create(42); // 报错
- create("string"); // 报错
- create(false); // 报错
说明
以前学习一些新的知识的时候, 学过了如果没有频繁地使用, 过一段时间就很容易忘记. 因此希望使用博客园和 GitHub 记录学习过程中的一些笔记, 这样的话, 下次再捡起来就比较快了. 而且每一次地记录其实都是对知识点的一次总结, 这样可以加深对知识点的理解和记忆, 当然学习过程中, 尤其是初学者肯定存在不正确的地方, 欢迎大家指正. GitHub 中保存了学习过程中的代码, 欢迎 star 和 issue.
https://github.com/yinhaiying/Typescript
来源: https://www.cnblogs.com/yinhaiying/p/10805634.html