TypeScript入门|青训营笔记

132 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第8天

什么是TypeScript

TypeScript起源

TypeScript 起源于使用JavaScript开发的大型项目 。由于JavaScript语言本身的局限性,难以胜任和维护大型项目开发。因此微软开发了TypeScript ,使得其能够胜任开发大型项目。

为什么、什么是TypeScript

  • JS: 动态类型、弱类型语言
  • TS: 静态类型、弱类型语言

类型系统按照「是否允许隐式类型转换」来分类,可以分为强类型和弱类型。

静态类型:

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

TS是JS的超集:

  • 包含兼容所有的JS特性,支持共存
  • 支持渐进式引入与升级

编译器推荐

  1. VScode
  2. TypeScript官网在线

基本语法

基础数据类型

string、number、boolean、null、undefined

复杂数据类型

object、Array 复杂数据类型通常使用interface、type和泛型结合使用,来约束复杂数据。

类型定义

  1. 只读属性:使用readonly来约束,约束属性不能在对象初始化外来赋值
  2. 可选属性:定义该属性可以不存在,使用?:来定义
  3. 任意属性:约束所有对象属性都必须是该属性的子类型,使用 [key:类型]:类型定义

函数类型

function add(x:number,y:number):number{ return x+y }
const add:(x:number,y:number) =>number = (x,y) => x*y

泛型

函数式泛型

<T>(a:T) => T[]

接口式泛型

类型<T>

高级类型

联合交叉类型

  • 联合类型:IA | IB,联合类型表示一个值可以是几种类型之一
  • 交叉类型:IA & IB,多种类型叠加在一起成为一种类型,包含了所需的所有类型的特性

联合交叉类型可以通过: x & y | z来表示,x、y、z是类型,式子表示,必须满足x,然后满足y或者z,或者都满足。

类型保护与类型守卫

类型守卫:定义一个函数,它的返回值是一个类型谓词,生效范围为子作用域。

interface IA{a:1,a1:2}
interface IB{b:1,b1:2}
function getIsIA(arg:IA|IB):arg is IA{
  return !!(arg as IA).a;
}

function log2(arg: IA | IB){
  if(getIsIA(arg)){
    console.log(arg.a1)
  }else{
    console.log(arg.b1)
  }
}