💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注小红书“希望睿智”。
背景
□ TypeScript起源于使用JavaScript开发的大型项目。由于JavaScript语言本身的局限性,难以胜任和维护大型项目开发,因此微软开发了TypeScript,使得其能够胜任开发大型项目。
□ TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或Babel转译为JavaScript代码,可运行于任何浏览器,任何操作系统。
□ 2012年10月,微软发布了首个公开版本的TypeScript。2013年6月19日,在经历了一个预览版之后,微软发布了正式版的TypeScript。
□ TypeScript的作者是安德斯·海尔斯伯格,他也是C#的首席架构师。
特性
TypeScript是一种给JavaScript添加特性的语言扩展,是JavaScript 的一个超集。
类型批注
□ 布尔值
□ 数字
□ 字符串
□ 数组
□ 元组tuple
□ 枚举
□ 任意值
□ 空值
□ null和undefined
默认情况下,null和undefined是所有类型的子类型,也就是说,你可以把null和undefined赋值给number类型的变量。但当你指定了--strictNullChecks标记,null和undefined只能赋值给void和它们自身,这能避免很多常见的问题。
□ 联合类型
联合类型表示一个值可以是几种类型之一。 我们用竖线(|)分隔每个类型,所以number | string | boolean表示一个值可以是number,string,或boolean。
如果一个值是联合类型,我们只能访问此联合类型的所有类型里共有的成员。
□ 类型转换(类型断言)
方式1:
方式2:
两种形式是等价的,至于使用哪个,大多数情况下是凭个人喜好。在TypeScript里使用JSX时,只有as语法是被允许的。
接口
□ 接口定义
□ 接口使用
□ 继承接口
类
□ 类的定义
□ 参数属性
参数属性通过给构造函数参数添加一个访问限定符来声明。使用private限定一个参数属性会声明并初始化一个私有成员,对于public和protected来说也是一样。
□ 存取器
通过getters/setters来截取对对象成员的访问
□ 类的继承
□ 抽象类
模块
□ 从ECMAScript 2015开始,JavaScript引入了模块的概念,TypeScript也沿用了这个概念。
□ 模块在其自身的作用域里执行,而不是在全局作用域里。这意味着定义在一个模块里的变量、函数、类等在模块外部是不可见的,除非你明确地使用export导出它们。相反,如果想使用其它模块导出的变量、函数、类、接口等的时候,你必须要导入它们,可以使用import。
□ 模块是自声明的,两个模块之间的关系是通过在文件级别上使用import和export建立的。
泛型
□ 设计一个函数echo,这个函数会返回任何传入它的值。
□ 使用泛型创建泛型函数时,编译器要求你在函数体内必须正确使用这个通用的类型。换句话说,你必须把这些参数当作是任意或所有类型。
□ 泛型类
□ 泛型约束
□ 类类型(使用泛型创建工厂函数时,需要引用构造函数的类类型)