TypeScript入门 | 青训营笔记
这是我参与「第五届青训营 」笔记创作活动的第4天
一、本堂课重点内容:
- TypeScript 历史、定义解析、工程应用
- TypeScript 优势解读、练习工具
- 联合交叉类型
- 类型保护与类型守卫
- Merge 函数类型实现
- 函数返回值类型
二、详细知识点介绍:
1. 发展历史
2. TypeScript和JavaScript
都是弱类型语言
但是JavaScript是动态类型,而TypeScript是静态类型
TypeScript的优势:
- 可读性增强:基于语法解析TSDoc.ide增强
- 可维护性增强:在编译阶段暴露大部分错误
- 多人合作的大型项目中,获得更好的稳定性和开发效率
- 包含于兼容所以js特性,支持共存
- 支持渐进式引入与升级
编辑器:Visual Studio Code
3. 基本语法
1. 基础数据类型
/*字符串*/
const q: string 'string';
/*数字*/
const w: number = 1;
/*布尔值*/
const e: boolean true;
/*nul1*/
const r: null = null;
/*undefined */
const t: undefined = undefined;
2. 对象类型
3. 函数类型
function add(x: number,y: number): number {
return x + y;
}
const mult: (x: number,y: number) => number = (x, y) => x * y;
4. 函数重载
对getDate函数进行重载,timestamp为可缺省参数
不能将类型“(type: any, timestamp: any)=>string|Date”分配给类型“IGetDate” 不能将类型“string |Date”分配给类型“string”。 不能将类型“Date”分配给类型“string” ts(2322)
5. 数组类型
用[类型+方括号]表示,有三种表示方法:
泛型表示、元祖表示、接口表示
6. 补充类型
空类型:表示无赋值
任意类型,是所有类型的子类型
枚举类型:支持枚举值到枚举名的正、反向映射
泛型
7. 高级类型
-
联合/交叉型
联合类型IA | IB 联合类型表示一个值可以是几种类型之一 交叉类型A&B,多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性
8. 类型保护与类型守卫
9. 高级类型
10 函数返回值类型
4.工程应用
使用TSC编译
- 安装node与npm
- 配置tsconfig.js文件
- 使用npm安装tsc
- 使用tsc运行编译得到js文件
三、实践练习例子:
/*报错:无法分配到"jobId",因为它是只读属性*/
bytedancer.jobId = 12345;
/*成功:任意属性标注下可以添加任意属性*/
bytedancer.plateform 'data';
/*报错:缺少属性"name",hobby可缺省*/
const bytedancer2: IBytedancer = {
jobId: 89757,
sex: 'woman',
age: 18,
}
interface IHistoryBook {
author: string;
type: string;
range: string;
}
interface IStoryBook {
author:string;
type:string;
theme:string;
}
type IBookList Array<IHistoryBook IStoryBook>;
interface ISourceObj {
x?: string;
y?: string;
}
interface ITargetObj {
x:string;
y:string
}
type IMerge = sourceObj:ISourceObj, targetObj: ITargetObj) => ITargetObj;
四、课后个人总结:
- TypeScript在某些方面、语法逻辑上与JavaScript相似,要注意区分
- TypeScript的语法逻辑以及代码的表示要能够认准