这是我参与【第五届青训营】笔记创作的第四天 TypeScript 是 JavaScript 的语法超集。
JS:动态类型(在执行阶段进行类型匹配等,即编译)。
TS:静态类型(编译在执行前)。
都是弱类型语言,可进行类型转换。
TS:可读性、可维护性增强。在多人合作的大型项目中,可以有更好的稳定性和开发效率。
JS的超集:包含于兼容所有JS特性,支持共存;支持渐进式引入和升级。
基本语法
基础数据类型:
字符串 const q : string = 'string';
数字 const w : number = 1 ;
布尔型 const e : boolean = true ;
null const r : null = null ;
undefined const t : undefined = undefined ;
变量名 : 类型 = 赋值 ;
对象类型:
const bytedance : IBytedancer = {}
interface IBytedancer {}
只读属性:不可在对象初始化外赋值。
可选属性:定义的内容可以不用。
任意属性:所有对象的属性必须是该属性的子类型。
函数类型:
声明+定义
函数重载:
数组:
【类型+方括号】 type IArr1 = number [ ] ;
泛型 type IArr2 = Array < string | number | Recode( string , number ) > (数组类型可以是字符串也可以是数字)
元祖 type IArr3 = [ number , number , string , string ]
IArr3[0]、IArr3[1] 是数字,IArr3[2]、IArr3[3] 是字符串。
空类型:无赋值 type a = () ;
任意类型: type b = any ;
枚举:enum EnumExample { add = '+' ; mult = '*' ; }
EnumExample['add'] === '+' ;
EnumExample['+'] === 'add' ;
泛型:
不预先指定具体的类型,在使用的时候再指定类型。
类型别名/类型断言
type IObjArr = Array <{...}> 定义了IObjArr的别名
类型断言:通过as关键字,断言result类型是否为正确的类型。
字符串/数字字面量:允许指定字符串/数字的固定值。
高级类型:
联合类型/交叉类型
联合类型:IA|IB,联合类型表示一个值可以是几种类型之一。
交叉类型:IA&IB,多个类型叠加到一起成为一种类型,包含了所需的所有类型的特性。
类型保护与类型守卫
访问联合类型时,处于程序安全,仅能访问联合类型中的交集部分。
类型守卫:定义一个函数,返回值是一个类型谓词,生效范围是子作用区。
联合类型+类型保护=自动类型推断