Skip to content

TS

  • TypeScript是JavaScript的超集,主要通过静态类型检查的能力在编译阶段发现JS代码问题
  • TS中的module与ES Module类似,通过import和export导入导出,但TS中可以通过 declare module 来声明外部依赖
  • 枚举用来定义一个常量组合,默认每一项值为数字,也可以单独设置每一项值
  • Interface和type都可以用来表示对象或者函数类型,且可以相互继承
  • 多个同名interface会进行属性合并,type不行
  • type还可以声明其他基本类型,interface不行
  • Omit用于从一个复杂类型中剔除某些属性,Pick用于从其中指定某些属性
  • 泛型用于通用类型,由外部调用者自己控制调用函数(或类)中的参数类型

为什么vue2对ts支持不好。

  1. Ts是2015年诞生的,vue2是2016年就发布了,编写的时候就没考虑类型支持
  2. TSX支持好是因为TS专门给做了支持。
  3. 模板字符串TS无能为力
  4. 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类型,使用之前需要进行类型判断