TypeScript入门 | 青训营笔记

169 阅读2分钟

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

本篇笔记主要记录的是关于ts的基础部分。

什么是TypeScript

简介:TypeScript 由微软开发的自由和开源的编程语言。

TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。

TS与JS的差别

JS:动态类型 弱类型语言

会在执行时做类型检验和匹配

TS:静态类型 弱类型语言

会在执行前检验和匹配

静态类型:

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

JS的超集:

  • 包容于兼容所有JS特性,支持共存
  • 支持渐进式引入与升级
  • 现有的 JavaScript 代码可与 TypeScript 一起工作无需任何修改
  • TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript 代码进行编译

弱类型语言特征:类型转化

编辑器推荐

VS code

TS的安装

可使用npm包来安装Ts,如果本地已经安装了npm,可使用以下命令来安装ts。

npm install -g typescript

基本语法

基础数据类型

/*字符串*/
const q = 'string'
/*数字*/
const w = 1;
/*布尔值*/
const e = true;
/*null*/
const r = null;
/*undefined*/
const t = undefined;

ts写法

/*字符串*/
const q: string = 'string'
/*数字*/
const w: number = 1;
/*布尔值*/
const e: boolean = true;
/*null*/
const r: null = null;
/*undefined*/
const t: undefined = undefined;

对象类型

定义对象类型名称时会在名词前加"I"表示该对象是一个类型

eg:const bytedancer:IBytedancer = {}

定义类型使用interface

函数类型

函数也支持使用interface定义类型

函数重载

function getDate(type:'string',timestamp?: string):string

timestamp为可缺省函数,在变量后加一个“?”则为可缺省函数

数组类型

常见用第一、二种

类型+方括号表示:

type IArr1 = number[]

泛型表示:

type IArr2 = Array<string | number | Record<string,number>>

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

接口表示:

interface IArr4 {

[key:number]:any }

TS泛型

在不定义类型时类型不明确,用target指代

function getRepeatArr(target){
  return new Array(100).fill(target)}
  
type IGetRepeatArr = (target:any) => any[]
​
type IGetRepeatArrR = <T>(target: T) => T[]

泛型不止应用在函数中

泛型约束:使用extends

type IGetRepeatStringArr = <T extends string> 限制泛型必须符合字符串

泛型参数默认类型

type IGetRepeatArr<T = number> =(target:T)

默认了数据类型为number类型

这两者是有区别的。

字符串/数字 字面量

允许指定字符串/数字必须的固定值

IDomTag必须为html、body、div、span中的其一

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

IDomNumber必须为1、3、5、7、9中其一

type IDomNumber = 1|3|5|7|9

高级类型

case、solution、evolution