Typescript入门 | 青训营笔记

60 阅读2分钟

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

Typescript发展历程

image.png

TS vs JS

  • JS为动态类型语言,只有当执行阶段,才会去进行语句检查和匹配
  • TS为静态类型语言,需要提前经过编译,确认语句无误编译成JS,才能被执行
  • 静态和动态的区别,就是编译的时间发生在执行前还是执行时
  • TS与JS都是若类型语言,变量类型会在一定条件下进行类型转换,比如说'1'与1相加,字符串会被转化为数字,null、undefined、false在作判断时会转换成数字0

为什么选择TS

image.png

TS数据类型

✔基础数据类型

类型说明
number数字型
boolean布尔型
string字符串型
字面量一个变量只能为一个或者多个值,如 let a: 'str' | 1 | true
null空值
undefined未定义
any任意类型(会污染其他变量)
unknown任意类型(安全)
never不可以为任何值

定义方法

// 变量
let num: number = 20;

✔对象类型

类型说明
object任意的对象类型
自定义使用typeinterface关键字定义类型

interface定义

// interface定义
interface Object01 {
    readonly num: number, // 只读属性
    name:string,
    gender: '女' | '男' | '未知',   // 字面量定义
    age?: number,  // 可有可无
    [key: string]: any // 任意类型
}
const obj1: Object01 = {
    num: 1,
    name: '李华'gender: '男',
    hobby: '敲代码'
}

type定义

// type定义
type Object01 = {
    readonly num: number, // 只读属性
    name:string,
    age: number,  
    [key: string]: string // 任意字符串类型属性
}
const obj1 = {
    num: 1,
    name: '李华'age: '18',
    hobby: '敲代码'
}

✔函数类型

类型说明
void无返回值或者undefined

定义方法

// 函数
function print(str: string): void {
    print('Hello TS'+str);
}

// 箭头函数
const add: (a: number.b: number) => number = (a,b) => a + b;

interface定义

interface Add {
    (a: number,b: number): number;
}

函数的重载

image.png image.png

// interface声明重载
interface Add {
    (a: number,b: number): number;
    (a: string,b: string): number;
    (a: string,b: number): number;
    (a: number,b: string): number;
}

const adds: Add = (a,b)=>{
    if(typeof a === 'string') {
        a = parseInt(a);
    }
    if(typeof b === 'string') {
        b = parseInt(b);
    }

    return a + b;
}

✔数组类型

类型说明
array任意JS数组
tuple固定长度数组,元祖表示

image.png

✔其他类型

类型说明
enum枚举类型
<T>泛型

image.png

泛型

image.png image.png

image.png

类型别名 & 类型断言 & 字面量类型

image.png image.png

高级类型

联合/交叉类型

类型说明
|联合
&交叉

image.png image.png image.png

类型保护与类型守卫

image.png image.png image.png

类型谓词

is 关键字一般用于函数返回值类型中,判断参数是否属于某一类型,并根据结果返回对应的布尔类型。

keyof 关键字

相当于把一个对象中所有属性的字符串形式取出来 image.png

infer extends 关键字

image.png