[ 深入浅出 TypeScript | 青训营笔记 ]

71 阅读2分钟

TS vs JS

TypeScriptJavaScript
JavaScript的超集,用来解决大型项目的代码复杂性一种脚本语言,用于创建动态网页
强类型,支持静态和动态类型动态弱类型语言
可以在编译期间发现和纠正错误只能在运行时发现错误
不允许改变变量的数据类型变量可以被赋值成不同类型

image.png

TS基础-基础类型

数据类型关键字
任意类型any
数字类型number
字符串类型string
布尔类型boolean
数组类型
元组(Tuple)
枚举enum
voidvoid
nullnull
undefinedundefined
nevernever
unknownunknown

注意: TypeScript 和 JavaScript 没有整数类型。

image.png

TS基础-函数类型

定义:TS定义函数类型时要定义输入参数类型和输出类型

输入参数︰参数支持可选参数和默认参数

输出参数:输出可以自动推断,没有返回值时,默认为void类型

函数重载:名称相同但参数不同,可以通过重载支持多种类型

TS基础——interface(接口):

定义:接口是为了定义对象类型

特点:

  • 有可选属性:?
  • 有只读属性:readonly
  • 可以描述函数类型
  • 可以描述自定义属性 总结:接口非常灵活duck typing

image.png

TS基础——class 类:

  • 增加了public、 private、protected修饰符

image.png

  • 抽象类:
    • 只能被继承,不能被实例化
    • 作为基类,抽象方法必须被子类实现

image.png

  • interface约束类,使用implements关键字

TS进阶-高级类型

  1. 联合类型|

image.png

  1. 交叉类型&

image.png

  1. 类型断言

image.png

  1. 类型别名(type VS interface)
    定义:给类型起个别名
    相同点:都可以定义对象和函数,都允许继承
    不同点:
    (1)interface是TypeScript用来定义对象,type是用来定义别名方便使用
    (2)type可以定义基本类型,interface不行
    (3)interface可以合并重复声明,type不行

image.png

泛型

基本定义:
1、泛型的语法是<>里面写类型参数,一般以T表示
2、使用时两种方法指定类型:
(1)定义要使用的类型
(2)通过TS类型推断,自动推导类型
3、泛型的作用是临时占位,之后通过传来的类型进行推导

基本操作符

  • typeof:获取类型
interface Person{
    name:string;
    age:number;
}
const sem:Person={name:'nike',age:30}

type Sem= typeof sem;//type Sem =Person
  • keyof: 获取所有键
interface Person{
    name:string;
    age:number;
}
type H1=keyof Person;//"name" | "age"
type H2=keyof Person[];//"length" | "toString" | "pop" | "push" | "concat" | "join"
  • in: 遍历枚举类型
type Keys="a" | "b" | "c"
type Obj={
    [p in Keys]:any
} //-> {a:any,b:any,c:any}
  • T[K]: 索引访问
interface IPerson{
    name:string;
    age:number;
}
let type1:IPerson['name']//string
let type2:IPerson['age']//number
  • extends:泛型约束
interface Length{
    length:number
}

function Log<T extends Length>(arg:T):T{
    console.log(arg.length);
    return arg;
}

Log({value:3})//提醒出现错误
Log({length:3})