TypeScript基础学习 | 青训营笔记

57 阅读3分钟

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

TypeScript发展历史

• 2012-10:微软发布了 TypeScript 第一个版本 (0.8)

• 2014-10:Angular 发布了基于 TypeScript 的 2.0版本

• 2015-04:微软发布了 Visual Studio Code

• 2016-05:@types/react 发布,TypeScript 可开发 React

• 2020-09:Vue 发布了3.0 版本,官方支持 TypeScript

• 2021-11:v4.5版本发布

什么是TypeScript?

静态类型

可读性增强:基于语法解析TSDoC,ide增强

可维护性增强:在编译阶段暴露大部分错误

多人合作的大型项目中,荻得更好的稳定性和开发效率

JS 的超集

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

支持渐进式引入与升级

基本语法

基础数据类型

字符串: const q: string ="string';

数字: const w: number = 1;

布尔值: const e: boolean = true;

null: const r: null = null;

undefined: const t: undefined = undefined;

函数类型

function add(x, y){
return x + y;
const mult = (x, y)=> × * y;
interface IMult{
(x: number, y: number): number;
}
const mult: IMult = (x, y) => x * y;
function add(x: number, y: number): number {
  return x + y;
}
const mult: (x: number, y: number) => number = (x,y) => x * y;

数组类型

「类型 +方括号」表示:type IArr1 = numberl];

泛型表示:type IArr2= Array<string | number | Record<string, number>>;

元祖表示:type IArr3 = [number, number, string, string];

Typescript补充类型

空类型,表示无赋值:type IEmptFunction = () => void;

任意类型:是所有类型的子类型:type = any;

高级类型

联合/交叉类型

联合类型:IA | IB;联合类型表示一个值可以是几种类型之一

交叉类型:IA & IB;多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性

image.png

类型保护与类型守卫

实现函数logBook类型

函数接受书本类型,并logger出相关特征

联合类型+ 类型保护=自动类型推断

function logBook(book: IBookItem) {
if (book.type ==="history"){
console. log (book. range)
} else {
console. log (book. theme);
 }
}

高级类型

关键字 【in】,其相当于取值 字符串字面量 中的一种可能,配合泛型P,即表示每个key

关键字【?】,通过设定对象可选选项,即可自动推导出子集类型

interface IMerge {
<T extends Record<string, any>> (source0bj: Partial<T>, targetObj: T): T;
}
type Partial<T extends Record<string, any>> = {
[P in keyof T]?: T[P];
}

关键字【keyof】,其相当于取值对象中的所有key组成的宇符串字面量,如

tpe IKeys = keyof i a: string; b: number }; // => type IKeys="a" | "b"  

函数返回值类型

实现函数delavCal的类型声明

delayCall接受一个函数作为入参,其实现延迟1s运行函数其返回promise,结果为入参函数的返回结果

function delayCall(func){
 return new Promise(resolve => {
  setTimeout)=>{
   const result = func() ;
    resolve(result);
   },1000);
  });
}

关键字 【extends】跟随泛型出现时,表示类型推断,其表达可类比三元表达式 如T===判断类型?类型A:类型B

关键字【infer】 出现在类型推荐中,表示定义类型变量,可以用于指代类型 如该场景下,将西数的返回值类型作为变量,使用新泛型R表示,使用在类型推荐命中的结果中

type IDelayCall = <T extends ()=> any> (func: T)=> ReturnType<T>;

type IReturnType<T extends (...args: any)=> any> = T extends (...args: any)=> infer R ? R: any

使用TSC编译

1.安装Node与npm

2.配置tsconfig.js文件

3.使用npm安装tsc

4.使用tsc运行编译得到js文件

image.png