1、什么是TypeScript?
一个拥有类型系统的JavaScript超集,可以编译成纯JavaScript。
三个要点:
- 类型检查,严格的类型检查,在编译阶段发现问题,不必把问题带到线上
- 语言扩展,包含ES6及未来提案中的特性,也从其他语言借鉴特性,比如接口和抽象类
- 工具属性,可以编译成纯JavaScript,可以在任何浏览器上运行,更像一个工具
2、为什么要使用TypeScript?
3、静态类型语言和动态类型语言
- 静态类型语言:在编译阶段确定所有变量的类型
- 动态类型语言:在执行阶段确定所有变量的语言
4、TypeScript的数据类型
除了ES6包含的数据类型,TypeScript又新增了
1)类型注解:相当于强类型语言中的类型声明。
2)联合类型,通过一个竖线来分开
3)元组越界问题,设置好的元组,可以通过push方法给元组新增元素,元素也可以被添加到元组中,但是在访问的时候报错
4)一个变量被声明为undefined/null类型,就不能再赋值其他类型,只能被赋值为它本身。
但是undefined/null类型是所有类型的子类型,是可以赋值给其他类型的,可以通过tsconfig.json里的 strictnullchecks 设置成 false 来实现
5)在JavaScript中,void是一个操符,可以让任何表达式返回undefined,比如最简单的返回undefined的方式是void 0,而且undefined不是一个保留字,可以通过设置一个undefined变量来覆盖全局的undefined变量。在TypeScript中,void类型就是指,没有任何返回值的类型。
6)没有声明的变量就是any类型
7)never是指永远不会有返回值的类型
8)枚举类型,就是一组有名字的常量集合,
9)枚举类型分为:
- 数字枚举和字符串枚举,数字枚举的实现原理是反向映射,成员名称分别作为key和value
- 字符串枚举,只有成员名称当做了key,
- 异构枚举,包含数字枚举和字符串枚举,不推荐使用
10)枚举成员的值是一个只读类型,不能修改
枚举成员的类型分为2类 - 常量枚举,会在编译的时候计算出结果,以常量的形式出现在运行环境
- 没有初始值的情况
- 对已有枚举成员的引用
- 常量表达式
- 需要被计算的枚举成员:一些非常量的表达式,不会再编译时计算,会在运行时计算。(在computed member成员后面的枚举成员,一定要有一个初始值,否则会报错)
11)常量枚举,用const声明的枚举类型为常量枚举,会在编译之后被删除
作用: 当我们不需要一个对象,而只需要对象的值的时候,就可以声明常量枚举,减少我们在编译环境的代码
12)枚举类型:两种不同类型的枚举,是不可以进行比较的。
5、对象类型接口
接口可以用来约束对象,函数,类的一种结构,是代码协作的契约
类型断言 x as string 明确的告诉编译器,这个x就是一个string类型,
字符串索引签名
interface result {
name: string;
age: number;
[x: string]: any; // 字符串索引签名
}
接口成员的属性:
不能知道接口的属性的数目,就可以使用,可索引类型的接口
interface StringArray {
[index: number]: string;
}
interface Names {
[x: string]: string;
}
// 混用
interface Person {
[x: string]: string;
[y: number]: string; // 数字类型的属性值的类型一定要是string类型的子类型,js会进行类型转换
}
接口定义函数
let add = (x: number, y: number) => number;
interface Add {
(x: number, y: number): number;
}
// 类型别名
type Add = (x: number, y: number) => number;
类型别名,就是为这个类型起一个名字
混合类型接口
interface Lib {
(): void;
version: string;
dosomething(): void;
}
let lib: Lib = (() => {}) as Lib;
lib.version = '1.0.0';
lib.dosomething = () => {}
//
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。