这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
重点内容
- 发展史
- 基本语法
发展史
为什么需要TS?
众所周知,JS是弱类型的动态语言。 而TS则是强类型的静态语言。 相比于TS,它的特点是:
- 可读性增强
- 可维护性增强
TS是JS的超集,包含兼容JS的所有特性,支持渐进式引入和升级。
基本语法
给变量定义类型。
基本类型
const q: string = 'string';
Interface
/只读属性:约束属性不可在对象初始化外赋值/
/可选属性:定义该属性可以不存在/
/任意属性:约束所有对象属性都必须是该属性的子类型/
函数类型
const result:(x:number, y: number) => number = (x,y) => x*y;
函数重载
函数重载既是在interface写多条类型。
数组类型
数组类型可以用多种方式表达。
第一种: [类型+方括号] 表示
第二种: 泛型表示
第三种: 元组表示
第四种: 接口表示
这四种方式没有好坏之分,实际使用都可以。
泛型
泛型是不预先指定具体的类型,而是在使用的时候再指定类型的一种特性。常用符号T表示。
可以对泛型做一些限制。
比如,后接extends+类型,就是限制了泛型只能为该类型,其他类型不行。
也可以指定泛型的默认参数,用=号连接。
类型别名 & 类型断言
通过type关键字定义了IObjArr的别名类型。
通过as关键字,断言result类型为正确类型。
ts也支持 允许指定字符串/数字必须的固定值。
高级类型
联合类型与交叉类型
联合类型: IA | IB;
交叉类型: IA & IB;
类型保护
可以直接通过.type然后拿到某个变量的类型,可用于后续变量类型的判断,达到类型保护的作用。
补充类型
- 空类型,表示无赋值
- 任意类型,是所有类型的子类型
- 枚举类型:支持枚举值到枚举名的正、反向映射
继承
通过extends关键字继承其他类型。
实践
interface IBytedancer {
readonly jobId: number;
name: string;
sex: 'man' | 'woman' | 'other';
age: number;
hobby?: string;
[key: string]: any;
}
参考
TypeScript入门.pptx - 飞书云文档 (feishu.cn)