这篇笔记主要记录typescript的学习笔记。
什么是TypeScript
JS:动态类型 弱类型语言
会在执行时做类型检验和匹配
TS:静态类型 弱类型语言
会在执行前检验和匹配
静态类型:
- 可读性增强:基于语法解析TSDoc,ide增强
- 可维护性增强:在编译阶段暴露大部分错误 => 多人合作的大型项目,获得更好的稳定性和开发效率
JS的超集:
- 包容于兼容所有JS特性,支持共存
- 支持渐进式引入与升级
弱类型语言特征:类型转化
编辑器推荐
VS code
基本语法
基础数据类型
/*字符串*/
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类型
这两者是有区别的。