Typescript
是 Javascript
的一个超集,且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程
Typescript
基于 Javascript
扩展了类型系统 + ECMAScript6+ 特性的支持 ===> 编译回原始的 JavaScript
功能更强大,生态更加健全、完善(微软自身的开发环境)
Angular | Vue.js3.0
语言类型
强类型语言:
- 语言层面限制函数的实参类型必须与形参类型相同
- 不允许任意的隐式类型转换
弱类型语言:
- 语言层面不会限制实参类型
- 可以隐式类型转换
静态类型语言
- 变量声明时就以明确,声明过后不允许修改
动态类型语言
- 运行时才能明确变量类型,并且可以随时变化
- 变量没有类型,但变量存放的值是有类型的
JavaScript
是弱类型且是动态类型语言JavaScript
脚本语言,*没有编译环节(类型检查)*,可直接在运行环境运行
异常要等到运行阶段才会被抛出
Flow
类型注解
1 | function sum (a: number, b: number) { |
基础类型
1 | export {} |
元祖类型
固定长度,固定成员的类型
1 | let tuple: [string, number, boolean] = ['aaa', 123, true] |
枚举类型
1 | enum Roles { |
可以自定义值
1
2
3
4
5
6
7
8
9enum Roles {
SUPER_ADMIN = 2,
ADMIN = 8,
USER = 'user'
}
console.log(Roles.ADMIN); // 8
console.log(Roles.USER); // user
console.log(Roles[8]); // ADMIN使用
1
2
3
4
5
6
7
8// 文档需要注明 0 是什么
if (role === 0) {
xxx
}
// 直观
if (role === Roles.SUPER_ADMIN) {
xxx
}转为 js
1
2
3
4
5enum Roles {
SUPER_ADMIN,
ADMIN,
USER
}1
2
3
4
5
6
7;
var Roles;
(function (Roles) {
Roles[Roles["SUPER_ADMIN"] = 0] = "SUPER_ADMIN"; // 设置了 SUPER_ADMIN 值为 0 ,也设置了 0 下标对应 SUPER_ADMIN
Roles[Roles["ADMIN"] = 1] = "ADMIN";
Roles[Roles["USER"] = 2] = "USER";
})(Roles || (Roles = {}));
any 任意类型
1 | let val:any = 'any value' |
void 类型
1 | // 如:函数无返回值 |
null && undefined
1 | // null && undefined 在 ts 中即是类型也是值 |
never
1 | // never 永远不存在的值 |
类型断言
强制指定类型
语法 :值 as 类型 || <类型>值
在 jsx 中必须使用 as
1 | (<string>target).length || (target as string).length |