TypeScript|青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第6天
一、课程知识要点:
JS与TS的区别- 基本语法
- 高级类型
- 工程应用
二、详细知识点介绍:
JS与TS的区别
JS:动态类型,弱类型语言TS:静态类型,弱类型语言
静态类型
- 可读性增强:基于语法解析TSDoc,ide增强
- 可维护性增强: 在编译阶段暴露大部分错误
- 多人合作的大型项目中,获得更好的稳定性和开发效率
JS的超集
- 包含于兼容所有
Js特性,支持共存 - 支持渐进式引入与升级
基本语法
- 基础数据类型
/* 字符串 */
const q = 'string';
/* 数字 */
const w = 1;
/* 布尔值 */
const e = true;
/* null */
const r=null;
/* undefined */
const t = undefined;
- 对象类型
- 函数类型
- 函数重载
- 数组类型
TypeScript补充类型(空类型,任意类型,枚举类型,泛型) 泛型
/* 泛型约束: 限制泛型必须符合字符串 */
type IGetRepeatStringArr = <T extends string>(target: T) => T[];
const getStrArr: IGetRepeatStringArr = target => new Array(100).fill(target);
/* 报错: 类型“number”的参数不能赋给类型“string"的参数 */
getStrArr(123);
/* 泛型参数默认类型 */
type IGetRepeatArr<T = number> = (target: T) => T[];
const getRepeatArr: IGetRepeatArr = target => new Array(100).fill(target);
/* 报错: 类型“string”的参数不能赋给类型“number”的参数 *
/ getRepeatArr('123');
- 类型别名&类型断言
- 字符串/数字 字面量
高级类型
- 联合/交叉类型
- 联合类型:IA|IB;联合类型表示一个值可以是几种类型之一。
- 交叉类型:IA&IB;多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。
- 类型保护与类型守卫 类型守卫: 定义一个函数,它的返回值是一个类型谓词,生效范围为子作用域
// 实现函数reverse
// 实现函数logBook类型
1. // 函数接受书本类型,并logger出相关特征
function logBook(book: IBookltem){
// 联合类型 + 类型保护 = 自动类型推断
if (book.type === 'history') {
console.log(book.range)
} else {
console.log(book.theme);
}
}
- 函数返回值类型
工程应用
- web
- 配置
webapack loader相关配置 - 运行webpack启动/打包
- 配置
tsconfig.js文件 - loader处理ts文件时,会进行编译与类型检查
- node
- 安装
Node与npm - 配置
tsconfig.js文件 - 使用npm安装tso
- 使用tsc运行编译得到js文件
三、课后总结
TypeScript与JavaScript的相同点是都是弱类型语言,TS由很多基本的语法需要我们在编程时注意。一些高级类型对我们的编程很有帮助。