一、前言
被那么多
特性吓尿了,实际上写业务用的特性不多。五月底ts正式升级了4.3版本,4.4也已经在beta版本了。差不多先生,够用就行,这里更多的是,以自己的理解去总结一下常用的ts特性。有理解错误的,欢迎大哥指正
👏🏻
知识这种东西,学了还是要总结下,梳理清楚自己对当前知识的掌握程度。偷懒了一段时间,接下来要好好发力了。
二、ts的优缺点
1、优点
代码的可读性和可维护性
:举个🌰看后端某个接口返回值
,一般需要去network看or去看接口文档,才知道返回数据结构,而正确用了ts后,编辑器会提醒
接口返回值的类型,这点相当实用。- 在
编译阶段
就发现大部分错误,避免了很多线上bug
- 增强了编辑器和 IDE 的功能,包括
代码补全
、接口提示
、跳转到定义
、重构
等
2、缺点
- 有一定的
学习成本
,需要理解接口(Interfaces)、泛型(Generics)、类(Classes)、枚举类型(Enums)等前端工程师可能不是很熟悉的概念 - 会增加一些
开发成本
,当然这是前期的,后期维护更简单了 - 一些JavaScript库需要
兼容
,提供声明文件,像vue2,底层对ts的兼容就不是很好。 - ts编译是需要
时间
的,这就意味着项目大了以后,开发环境启动和生产环境打包的速度就成了考验
或多或少,听到过的开发体验最好的架构:React Hooks + TypeScript
。目前也在用,还在学习中,至于到底好不好,我还是对vue
情有独钟。前端还在快速发展中,后面再出来个xxxScript
,谁也说不好。所以一个字:学!
三、anyScript
可能因为业务场景或者业务紧张,or某个跑路的大哥省了点功夫,用了typeScript的项目也可能会变成anyScript
。以下是几种救急的方式(大哥们还没有其他办法
):
- // @ts-nocheck 禁用整个文件的ts校验
- // @ts-ignore 禁用单行ts校验
- any和unknown
不建议多用,但也不是不能用,有些场景确实不好写ts定义。这个时候就不要硬憋自己了,写个备注any下。
抛个面试题:
你知道any和unknown的区别吗?
回归正题,开始学习,总结一些项目中使用较多的,一些TS高级特性这里就不说了。
四、ts类型
本篇所有demo都可在 [TypeScript Playground] 运行,不理解的建议都来跑跑看。
1、基础类型
- 常用:boolean、number、string、array、enum、any、void
- 不常用:tuple、null、undefine、never
const count: number = 20210701;
2、对象类型
简单理解interface 和 type 的区别:type 更强大,interface 可以进行声明合并
,type 不行;
看个人习惯,一般声明都用interface,需要用到其他变量类型,type多一些。有没有interface或type一把梭的
🤣?
interface Hero {
name: string;
age: number;
skill: string;
skinNum?: number;
say(): string; // say函数返回值为string
[propname: string]: any; // 当前Hero可定义任意字符串类型的key
}
// 继承
interface littleSoldier extends Hero {
rush(): string;
}
// 任意类型
interface IAnyObject {
[key: string]: any;
}
type Hero = {
name: string,
age: number,
skill: string,
skinNum?: number,
};
3、数组类型
项目中常见的写法,需要声明列表数据
类型:
interface IItem {
id: number;
name: string;
isDad: boolean;
}
const objectArr: IItem[] = [{
id: 1, name: '俊劫', isGod: true }];
// or
const objectArr: Array<IItem> = [{
id: 1, name: '俊劫', isGod: true }];
const numberArr: number[] = [1, 2, 3];
const arr: (number | string)[] = [1, "string",