- 什么是TypeScript?
- TypeScript是基于JavaScript构建的强类型语言,是一个编写更大规模应用的好工具。
- TypeScript为JavaScript增加了额外的语法以更加紧密的与编辑器集成,能够在编辑器中显示出现的错误。
- TypeScript代码最终会转为JavaScript代码。
- TypeScript明白JS代码并且提供了类型接口。
- 为什么需要TypeScript
- 有利于在编码时发现错误。在编写代码时,最常见的错误就是类型错误,一个类型的数据被用作其他类型。这可能是由简单的书写错误导致,也有可能是对运行时的错误假设。
- TypeScript提供了静态检查的功能,保证代码运行时与编写时的设想一致,降低错误概率
- TypeScript如何工作的?
通过了解JavaScript工作原理,ypeScript构建了一个类型系统用于接收JavaScript代码,无需添加任何字符,即可自动推论,在代码中显式显示。如let a = “hello world”, 可以知晓变量a为一个字符串。
但是一些设计模式使得自动类型推断变得困难,为了解决这种情况,TypeScript提供了JavaScript语言的扩展,提供了告诉TypeScript应该是什么类型的地方。如:
// 直接定义一个对象,需要TypeScript进行自动类型推断const user = {name:"wang",id:0}// 我们还可以使用 interface 定义一个类型,来描述这个对象长什么样子interface User {name: string;id: number}// 使用 :TypeName 语法,将类型写在变量后面const user: User = {name: "li",id:1}// 如果你提供了一个类型定义中不存在的属性,TypeScript将会提醒你const user: User = {username: "Hayes",id: 0};// Type '{ username: string; id: number; }' is not assignable to type 'User'.Object literal may only specify known properties, and 'username' does not exist in type 'User'.id: 0,
- 类型的种类
可以在interface中使用的除了JavaScript中的基本类型如boolean, bigint, null, number, string, symbol, undefined,还可以使用TS扩展的几个类型如any, unknown, never,void等。
- 组合类型
- 联合类型-Unions
// 定义为多种类型中的一个type AddressType = string | string[]// 定义为多个值中的一个type LockState = "locked" | "unlocked"
- 联合类型-Unions
b. 泛型-Generics
所谓泛型,是定义一个接口时,暂时不指定其具体类型,用一个符号代替,这个符号是一个可以被替代的变量。就像对Array的类型定义Array
c. 结构化类型系统-Structural Type System
类型检查的核心原则是聚焦于被检查的值有什么,也叫做“鸭型填充”或“结构分型”,在结构haul系统中,如果两个对象拥有相同的形态,就认为他们是一个类型。
interface Point {x: number;y: number;}function logPoint(p: Point) {console.log(`${p.x}, ${p.y}`)}const point = { x: 12, y: 26, z:33};logPoint(point); // 12 26
上面例子中,point中有多余的字段,但是仍然是正常的,说明类型约束条件需要是被匹配对象的子集。
