Typescript
类型系统初识
什么是类型
程序 = 数据结构 + 算法 = 各种格式的数据 + 处理数据的逻辑
数据是有格式(类型)的
- 数字、布尔值、字符
- 数组、集合
程序是可能有错误的
- 计算错误(对非数字类型数据进行一些数学运算)
- 调用一个不存在的方法
不同类型的数据有不同的操作方式或方法,如:字符串类型的数据就不应该直接参与数学运算
动态类型语言 & 静态类型语言
动态类型语言
程序运行期间才做数据类型检查的语言,如:JavaScript
静态类型语言
程序编译期间做数据类型检查的语言,如:Java
静态类型语言的优缺点
优点
- 程序编译阶段(配合IDE、编辑器甚至可以在编码阶段)即可发现一些潜在错误,避免程序在生产环境运行了以后再出现错误
- 编码规范、有利于团队开发协作、也更有利于大型项目开发、项目重构
- 配合IDE、编辑器提供更强大的代码智能提示/检查
- 代码即文档
缺点
- 麻烦
- 缺少灵活性
动态类型语言
优点
- 静态类型语言的缺点
缺点
- 静态类型语言的优点
静态类型语言的核心 : 类型系统
什么是类型系统
类型系统包含两个重要组成部分
- 类型标注(定义、注解) - typing
- 类型检测(检查) - type-checking
类型标注
类型标注就是在代码中给数据(变量、函数(参数、返回值))添加类型说明,当一个变量或者函数(参数)等被标注以后就不能存储或传入与标注类型不符合的类型
有了标注, TypeScript 编译器就能按照标注对这些数据进行类型合法检测。
有了标注,各种编辑器、IDE等就能进行智能提示
类型检测
顾名思义,就是对数据的类型进行检测。注意这里,重点是类型两字。
类型系统检测的是类型,不是具体值(虽然,某些时候也可以检测值),比如某个参数的取值范围(1-100之间),我们不能依靠类型系统来完成这个检测,它应该是我们的业务层具体逻辑,类型系统检测的是它的值类型是否为数字!
类型标注
- 在 TypeScript 中,类型标注的基本语法格式为:
数据载体:类型
- TypeScript 的类型标注,我们可以分为
- 基础的简单的类型标注
- 高级的深入的类型标注
基础的简单的类型标注
- 基础类型
- 空和未定义类型
- 对象类型
- 数组类型
- 元组类型
- 枚举类型
- 无值类型
- Never类型
- 任意类型
- 未知类型(Version3.0 Added)
基础类型
- 基础类型包含:string,number,boolean
- 标注语法
let title: string = 'xzx'; let n: number = 100; let isOk: boolean = true;
空和未定义类型
- 因为在 Null 和 Undefined 这两种类型有且只有一个值,在标注一个变量为 Null 和 Undefined 类型,那就表示该变量不能修改了
let a: null; // ok a = null; // error a = 1;
- 默认情况下 null 和 undefined 是所有类型的子类型。 就是说你可以把 null 和 undefined 其它类型的变量
let a: number; // ok a = null;
- 如果一个变量声明了,但是未赋值,那么该变量的值为 undefined ,但是如果它同时也没有标注类型的话,默认类型为 any , any 类型后面有详细说明
// 类型为 `number`,值为 `undefined` let a: number; // 类型为 `any`,值为 `undefined`
小技巧
- 因为 null 和 undefined 都是其它类型的子类型,所以默认情况下会有一些隐藏的问题
let a:number; a = null;// ok(实际运行是有问题的) a