TypeScript | 青训营笔记

68 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

文档:

www.typescriptlang.org/docs/

www.tslang.cn/docs/home.h…

JS:动态类型;弱类型语言

  • 动态:执行的时候才检查类型;编译发生在执行时

TS:静态类型;弱类型语言

  • 静态:编译发生在一开始

弱类型语言:类型转化,存在隐式类型转换

强类型语言

为什么TS?

静态类型

  • 可读性增强:基于语法解析TSDoc,ide增强
  • 可维护性增强:在编译阶段暴露大部分错误;多人合作的大型项目中,获得更好的稳定性和开发效率

JS的超集

  • 包含于兼容所有Js特性,支持共存

  • 支持渐进式引入与升级

基本语法

www.tslang.cn/docs/handbo…

TypeScript里的类型注解是一种轻量级的为函数或变量添加约束的方式。

  • readonly:只读属性
  • ?:可选属性,可以存在可以不存在
  • any:任意属性

前三种简化写法

IArr4是任意类型的

type别名

函数泛型,和其他的有一些区别

如果用any就会丢失数据类型;范型可以

有点像Java

两个特性

  • 泛型约束
  • 泛型参数默认类型

type定义了类型别名

KeyBy将Array转化object

  • 传入了一个空对象,result是一个object,通过as进行类型断言

高级类型

联合/交叉类型

类型保护:去对一个联合类型判断时候,需要他们共有的类型;第一段代码会报错

我们怎么去修改第一个版本呢?

类型守卫

  • 返回值 arg is IA;当返回是true的时候,arg一定是IA
  • as类型断言,当有a的时候一定是IA

只有类型完全没有重合的时候需要去做类型守卫

但是这样很麻烦

function reverse(input: string | any[]): string | any[] {
  if (typeof input === 'string') {
    return input.split('').reverse().join('');
  } else if (Array.isArray(input)) {
    return input.reverse();
  } else {
    throw new Error('Invalid input type, expected string or array.');
  }
}

reverse传入一个string或者array然后翻转

字符串不支持reverse,就先把他转换成数组,再reverse再join

typeof是默认的自动保护/type也是

第一种比较安全,第二种可能存在参数污染

keyof类型索引

in表示每个

Partial已经是内嵌类型

Promise是函数的返回值,同个泛型表达,用的时候才表示

ReturnType:传入一个函数,就可以返回这个函数的返回类型

extends跟随泛型出现,表示类型推断;和三元表达式一样

这段代码是 TypeScript 中的一个类型别名(Type Alias),用于定义一个泛型类型 IReturnType<T>,它的作用是获取函数类型 T 的返回值类型。

具体而言,这个类型别名使用了 TypeScript 中的条件类型(Conditional Types)和类型推断(Type Inference)机制,其中:

  • T extends (...args: any) => any 表示 T 必须是一个函数类型,且可以接受任意类型的参数;
  • ...args: any 表示函数可以接受任意数量的参数;
  • => infer R 表示通过类型推断来获取函数的返回值类型,将其存储在类型变量 R 中;
  • ? R : any 表示如果成功获取到函数的返回值类型 R,则返回 R,否则返回 any 类型。

因此,对于一个给定的函数类型 F,可以使用这个类型别名来获取它的返回值类型,例如:

typescriptCopy code
function add(a: number, b: number): number {
  return a + b;
}

type ResultType = IReturnType<typeof add>; // 等同于 type ResultType = number

在这个示例中,我们定义了一个名为 add 的函数,它接受两个参数 ab,并返回它们的和。我们可以使用 typeof 操作符来获取 add 函数的类型,然后通过 IReturnType 类型别名来获取其返回值类型 number

工程应用

处理JS文件

  • 浏览器Web

  • Node.js

  • Webpack loader:将文件转成JS文件
  • 配置tsconfig.js
  • 打包
  • 编译与类型检查