TypeScript入门 | 青训营笔记

47 阅读2分钟

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

TypeScript的发展与基础语法

为什么是TypeScript?

JS是动态类型的弱类型语言

TS是静态类型的弱类型语言

TS是JS的超集:包含于兼容所有JS特性,可以共存

弱类型

弱类型语言会实行隐式转换

动态类型

在代码执行的时候做类型检验和匹配

静态类型

创建数据时需要显式指明该数据的类型

  • 可读性强
  • 可维护性强
  • 利于多人开发

基础语法

基础数据类型

JS会自动匹配数据类型

对象类型

函数类型

在参数后加(:类型)

用interface来定义一个函数

函数重载

数组类型

type IArr1 = number[];
type IArr2 = Array<string | number Record<string, number>>;
type IArr3 = [number, number, string, string];
interface IArr4{
    [key: number]: any;
}

TypeScript泛型

interface IX<T, U> {
    key: T;
    val: U;
}
class IMan<T> {
    instance: T;
}

类型别名

type IDomTag = 'html' | 'body' | 'div' | 'span';

高级类型

联合/交叉类型

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

类型保护与类型守卫

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);
    }
}

merge函数类型

函数返回值类型

function delayCall(func){
    return new Promise(resolve => {
        setTimeout( () => {
            const result = func();
            resolve(result);
        },1000);
    })
}
type IDelayCall = <T extends () => any>(func: T) => ReturnType<T>;
​
type IReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any

工程应用

浏览器web

webpack

  1. 配置webpack loader相关配置
  2. 配置tsconfig.js文件
  3. 运行webpack启动/打包
  4. loader处理ts文件时,会进行编译与类型检查

Node.js

使用tsc编译

  1. 安装node与npm
  2. 配置tsconfig.js文件
  3. 使用npm安装tsc
  4. 使用tsc运行编译得到的js文件

总结

对于一个TypeScript的小白来说,这次课程里TypeScript基础语法中的泛型和类型别名以及高级类型中的联合/交叉类型,类型保护与类型守卫等都是难度较高的。不过这也给我指明了一个方向,让我知道要往哪些方向进行进一步的学习。