关于 TypeScript 的入门到精通

337 阅读6分钟

TypeScript 是由微软 2012年推出的,自由和开源的编程语言。这门语言在业界已经相当的流行。我们熟知的Vue, React, Angular 这些广泛应用的前端框架,都在使用 TypeScript进行开发,鸿蒙系统3.0也重点推荐使用JS开发应用,在最新推出的开发框架ArkUI, 也全面拥抱TS了。

Vue.png React.png Angular.png

TypeScript是JavaScript的超集,正是因为它是建立在JavaScript上的一门语言,TypeScript把其他语言的一些精妙的语法带入到JavaScript之中,从而把JS带到一个新的高度,你可以在TS中使用JS之外的扩展语法,同时借助TS对面向对象和静态类型的良好支持,可以编写更健壮,更可维护的大型项目。这门课将帮大家从 0 到 1 学习TypeScript。


→ 想学TS的点这里 ←


附上课程目录

〇、课程介绍 
基础篇 
一、TypeScript介绍 
1.1 什么是TypeScript 
1.2 JS , ES , TS 的关系 
1.3 TypeScriptJavaScript 的区别 
1.4 TypeScript 的竞争者有哪些? 
1.5 TypeScript的未来 
1.5.1TypeScript 的未来怎么看? 
1.5.2 如今的竞争者 
1.5.3 TypeScript 怎么看它在生态中的位置? 
1.5.4 TypeScript 怎么看它的受众? 
1.5.5 TypeScript 是如何跟踪 JS 生态的? 
二、TypeScript入门 
2.1 发现问题 
2.2 静态类型检查 
2.3 非异常故障 
2.4 使用工具 
2.5 tsc 编译器 
2.6 发出错误 
2.7 显式类型 
2.8 擦除类型 
2.9 降级编译 
2.10 严格模式 
三、常用类型 
3.0 TypeScript配置文件 
3.1 基元类型 string , number , 和 boolean 
3.2 数组 
3.3 any 
3.4 变量上的类型注释 
3.5 函数 
3.6 对象类型 
3.7 联合类型 
3.8 类型别名 
3.9 接口 
3.10 类型断言 
3.11 文字类型 
3.12 nullundefined 
3.13 枚举 
3.14 不太常见的原语 
四、类型缩小 
4.1 typeof 类型守卫 
4.2 真值缩小 
4.3 等值缩小 
4.4 in 操作符缩小 
4.5 instanceof 操作符缩小 
4.6 分配缩小 
4.7 控制流分析 
4.8 使用类型谓词 
4.9 受歧视的 unions 
4.10 never 类型与穷尽性检查 
五、函数更多 
5.1 函数类型表达式 
5.2 调用签名 
千锋大前端教研院5.3 构造签名 
5.4 泛型函数 
5.4.1 类型推断 
5.4.2 限制条件 
5.4.3 使用受限值 
5.4.4 指定类型参数 
5.4.5 编写优秀通用函数的准则 
5.5 可选参数 
5.5.1 回调中的可选参数 
5.6 函数重载 
5.6.1 重载签名和实现签名 
5.6.2 编写好的重载 
5.6.3 函数内 This 的声明 
5.7 需要了解的其他类型 
5.7.1 void 
5.7.2 object 
5.7.3 unknown 
5.7.4 never 
5.7.5 Function 
5.8 参数展开运算符 
5.8.1 形参展开(Rest Parameters) 
5.8.2 实参展开(Rest Arguments) 
5.9 参数解构 
5.10 函数的可分配性 
5.10.1 返回 void 类型 
六、对象类型 
6.1 属性修改器 
6.1.1 可选属性 
6.1.2 只读属性 
6.1.3 索引签名 
6.2 扩展类型 
6.3 交叉类型 
6.7 接口与交叉类型 
6.8 泛型对象类型 
6.9 数组类型 
6.10 只读数组类型 
6.11 元组类型 
6.12 只读元组类型 
七、类型操纵 
7.0 从类型中创建类型 
7.1 泛型
7.1.1 Hello World 
7.1.2 使用通用类型变量 
7.1.3 泛型类型 
7.1.4 泛型类 
7.1.5 泛型约束 
7.1.6 在泛型约束中使用类型参数 
7.1.7 在泛型中使用类类型 
7.2 Keyof 类型操作符 
7.3 Typeof 类型操作符 
7.4 索引访问类型 
7.5 条件类型 
7.5.1 条件类型约束 
7.5.2 在条件类型内进行推理 
7.5.3 分布式条件类型 
7.6 映射类型 
7.6.1 映射修改器 
千锋大前端教研院7.6.2 通过 as 做 key 重映射 
7.6.3 进一步探索 
八、类
8.1 类成员 
8.1.1 类属性 
8.1.2 readonly 
8.1.3 构造器 
8.1.4 方法 
8.1.5 Getters / Setters 
8.1.6 索引签名 
8.2 类继承 
8.2.1 implements 子句 
8.2.2 extends 子句 
8.2.3 重写方法 
8.2.4 初始化顺序 
8.2.5 继承内置类型 
8.2 成员的可见性 
8.2.1 public 
8.2.2 protected 
8.2.3 private 
8.3 静态成员 
8.3.1 特殊静态名称 
8.3.2 为什么没有静态类? 
8.4 类里的 static 区块 
8.5 泛型类 
8.6 类运行时中的 this 
8.7 this 类型 
8.8 基于类型守卫的 this 
8.9 参数属性 
8.10 类表达式 
8.11 抽象类和成员 
8.12 类之间的关系 
九、模块
9.1 如何定义JavaScript模块 
9.2 非模块 
9.3 TypeScript 中的模块 
9.3.1 ES模块语法 
9.3.2 额外的导入语法 
9.3.3 TypeScript特定的ES模块语法 
9.3.4 ES模块语法与CommonJS行为 
9.4 CommonJS 语法 
9.4.1 导出 
9.4.2 CommonJSES模块的互操作性 
9.5 TypeScript的模块解析选项 
9.6 TypeScript的模块输出选项 
9.7 TypeScript 命名空间 
高级篇 
一、变量声明 
1.1 var 变量声明 
1.2 作用域规则 
1.3 变量捕获的怪癖 
1.4 let 变量声明 
1.5 块级作用域 
1.6 重复声明和投影 
1.7 块级作用域变量捕获 
1.8 const 声明 
1.9 letconst 比较 
千锋大前端教研院1.10 解构 
1.11 数组析构 
1.12 元组解构 
1.13 对象解构 
1.14 Function 声明 
1.15 展开 
二、类型推断 
2.1 最佳公共类型 
2.2 上下文类型 
三、枚举
3.1 数值型枚举 
3.2 字符串枚举 
3.3 异构枚举 
3.4 计算型和常量型成员 
3.5 联合枚举和枚举成员类型 
3.6 运行时的枚举 
3.7 编译时的枚举 
3.8 环境枚举 
3.9 对象与枚举 
四、 公共类型 
4.1 Partial <Type> 
4.2 Required <Type> 
4.3 Readonly 
4.4 Record<Keys, Type> 
4.5 Pick<Type, Keys> 
4.6 Omit<Type, Keys> 
4.7 Exclude<Type, ExcludedUnion> 
4.8 Extract<Type, Union> 
4.9 NonNullable 
4.10 Parameters 
4.11 ConstructorParameters 
4.12 ReturnType 
4.13 InstanceType 
4.14 ThisParameterType 
4.15 OmitThisParameter 
4.16 ThisType 
4.17 字符串操作类型 
Uppercase<StringType> 
Lowercase<StringType> 
Capitalize<StringType> 
Uncapitalize<StringType> 
五、Symbols 
5.1 unique symbol 
5.2 知名的 Symbols 
5.2.1 Symbol.hasInstance 
5.2.2 Symbol.isConcatSpreadable 
5.2.3 Symbol.iterator 
5.2.4 Symbol.match 
5.2.5 Symbol.replace 
5.2.6 Symbol.search 
5.2.7 Symbol.species 
5.2.8 Symbol.split 
5.2.9 Symbol.toPrimitive 
5.2.10 Symbol.toStringTag 
5.2.11 Symbol.unscopables 
六、类型兼容性 
6.1 关于健全性的说明 
千锋大前端教研院6.2 起步 
6.3 对比两个函数 
6.4 函数参数的双差性 
6.5 可选参数和其余参数 
6.6 带有重载的函数 
6.7 枚举 
6.86.9 类中的私有和受保护成员 
6.10 泛型 
6.11 子类型与赋值 
6.12 any , unknown , object , void , undefined , null , 和 never 可分配性 
七、迭代器和生成器 
7.1 遍历
7.1.1 Iterable 接口 
7.1.2 for..of 声明 
7.1.3 for..offor..in 声明 
7.2 代码生成 
7.2.1 生成目标 ES5ES3 
7.2.2 ECMAScript 2015 和 更高版本 
八、装饰器(Decorators8.1 简介 
8.2 装饰器 
8.3 装饰器工厂 
8.4 装饰器构成 
8.5 装饰器评估 
8.6 类装饰器 
8.7 方法装饰器 
8.8 访问器装饰器 
8.9 属性装饰器 
8.10 参数装饰器 
8.11 Metadata 
九、JSX 
9. 1 基本用法 
9.2 as 操作符 
9.3 类型检查 
9.4 内在元素 
9.5 基于值的元素 
9.5.1 函数组件 
9.5.2 类组件 
9.6 属性类型检查 
9.7 子类型检查 
9.8 JSX的结果类型 
9.9 嵌入表达式 
9.10 React 集成 
9.10.1 配置JSX 
十、混入
10.1 混入是如何工作的? 
10.2 受约束的混入 
10.3 替代模式 
10.4 限制条件 
10.4.1 装饰器和混入 #4881 
10.4.2 静态属性混入 #17829 
十一、三斜线指令 
11.1 /// <reference path="..." /> 
11.2 /// <reference types="..." /> 
11.3 /// <reference lib="..." /> 
11.4 /// <reference no-default-lib="true"/> 
14.5 /// <amd-module /> 
14.6 /// <amd-dependency /> 
十二、模块 
12.1 导出 
12.1.1 导出声明 
12.1.2 导出别名 
12.1.3 二次导出 
12.4 导入 
12.4.1 从一个模块中导入一个单一的导出 
12.4.2 将整个模块导入到一个变量中,并使用它来访问模块的出口。 
12.4.3 导入一个只有副作用的模块 
12.5 默认输出 
12.6 as x 导出全部 
12.7 export = 与 import = require() 
12.8 模块的代码生成 
12.9 案例 
12.10 可选模块加载和其他高级加载场景 
12.11 与其他JavaScript库一起工作 
12.11.1 环境模块 
12.11.2 速记的环境模块 
12.11.3 通配符模块的声明 
12.11.4 UMD 模块 
12.12 构建模块的指导意见 
12.12.1 尽可能接近顶层导出(export) 
12.12.2 扩展的重新导出 
12.12.3 不要在模块中使用命名空间 
12.12.4 红线 
十三、模块解析 
13.1 相对与非相对的模块导入 
13.2 模块解析策略 
13.2.1 Classic 
13.2.2 Node 
13.3 额外的模块解析标志 
13.3.1 Base URL 
13.3.2 路径映射 
13.3.3 带有 rootDirs 的虚拟目录 
13.4 追踪模块的解析 
13.5 应用 --noResolve 
13.6 常见问题