TS
- TypeScript是JavaScript的超集,主要通过静态类型检查的能力在编译阶段发现JS代码问题
- TS中的module与ES Module类似,通过import和export导入导出,但TS中可以通过 declare module 来声明外部依赖
- 枚举用来定义一个常量组合,默认每一项值为数字,也可以单独设置每一项值
- Interface和type都可以用来表示对象或者函数类型,且可以相互继承
- 多个同名interface会进行属性合并,type不行
- type还可以声明其他基本类型,interface不行
- Omit用于从一个复杂类型中剔除某些属性,Pick用于从其中指定某些属性
- 泛型用于通用类型,由外部调用者自己控制调用函数(或类)中的参数类型
为什么vue2对ts支持不好。
- Ts是2015年诞生的,vue2是2016年就发布了,编写的时候就没考虑类型支持
- TSX支持好是因为TS专门给做了支持。
- 模板字符串TS无能为力
- vue借助vue-class-component
namespace vs module
- namespace 是为了解决命名冲突的问题,本质是一个对象,将一系列相关的全局变量组织到一个对象的属性。使用export导出变量。有ES6后,官方已经不推荐使用namespace了。
- module是ts中代码管理的方式。任何包括import或export语句的文件都是module。
装饰器
- 格式:@后面是个函数名。函数接受所修饰对象的一些相关值为参数,函数要么不返回值,要么返回一个新对象取得目标对象。
- 分为类装饰器、方法装饰器、属性装饰器。
- 多个装饰器,先执行内层装饰器。
- 在2022年分为新旧装饰器语法,但目前大量使用的是旧装饰器语法。
- 新装饰器参数是:value(所装饰的对象)、context(上下文)
- 旧装饰器参数是:类装饰器:target
- 方法属性装饰器:target、方法名/属性名
运算符
- keyOf
- in
- 方括号运算符[]:从对象取出属性的类型,
- is :说明关系 如果A is B 则返回true
- extends...?:三目运算符
Exclude<a, b>
- 排除a中的b
type vs interface
- 拓展方式: &,extends
- 合并声明:interface支持
- 表示范围:interface只能定义对象
- 默认值:type可以定义默认值
- 使用范围:type可以在函数内部使用
ts 中 any 和 unknown
any类型,可以绕过类型检测,可以直接使用 unknown类型,使用之前需要进行类型判断