前言
TypeScript 是一种基于 JavaScript 的可选静态类型语言,它提供了静态类型检查、面向对象编程、类型推断等特性,能够让我们在开发大型 web 应用时更加安全、可靠、易于维护。
TypeScript 通过类型注解和类型声明来约束变量、函数、类等值的类型,并且可以进行类型转换和操作。在 TypeScript 里,每个值都有一个对应的类型,类型代表了可能的取值范围和对应的操作。
可选协议
TypeScript 的类型检查是可选的,通过我们手动添加类型注解和声明来让 TypeScript 认识我们的代码。这样做的好处是能够在编码过程中减少出错的机会,提高代码质量,好处还有提供了在编程过程中的指导性意义,能够很好地组织代码,让代码更明确,更易读。
为了让 TypeScript 更加智能地理解我们的代码,我们还可以通过一些特殊的语法来扩展 TypeScript 的类型检查,这就是可选协议。
可选协议提供了一种在不破坏 JavaScript 原有语法和语义的情况下,为 TypeScript 提供更丰富的类型信息。它包括了以下内容:
- 限定字符串类型
TypeScript 中如果需要限定一个属性或变量只能接收某些特定值,我们可以使用字面量类型:
type Direction = "left" | "right" | "top" | "bottom"; function move(dir: Direction) { console.log(`moving ${dir}`) } move("left"); // okay move("up"); // Type '"up"' is not assignable to parameter of type 'Direction'.
可以看到,我们定义了一个 Direction
类型,它只有 4 种取值,有了这个类型,我们就可以确保 move
函数只接收这 4 种取值中的一个,其他值就会报错。
- 限定对象类型
我们可以使用类型界面(Type Interface)或类型别名(Type Alias)来限制某个对象的属性和类型。比如:
-- -------------------- ---- ------- --------- ------ - ----- ------- ---- ------- - -------- ------------- ------- - ------------------- ------------------ - ------- ----- ------ ---- -- --- -- ---- ------- ----- ----- --- -- ------ -------- ----- -- ------- -- ---- -- ----- ------- -- --- -------- -- ---- ---------
可以看到,我们定义了一个 Person
对象类型,它有两个必填属性 name
和 age
,当我们调用 greet
函数时,如果传入的参数不符合 Person
对象类型的规则,就会报错。
- 限定函数类型
我们可以使用类型界面或类型别名来限制函数的参数和返回值类型:
type Add = (x: number, y: number) => number; const add: Add = (x, y) => x + y; console.log(add(1, 2)); // 3 console.log(add("1", "2")); // Error: Argument of type 'string' is not assignable to parameter of type 'number'.
可以看到,我们定义了一个 Add
类型别名,它表示接收两个 number
类型参数并返回一个 number
类型值的函数类型。当我们声明了 add
变量并赋值一个函数时,TypeScript 就会根据 Add
的限制,对参数和返回值类型进行检查。
总结
可选协议是 TypeScript 的一个功能强大的特性,它可以方便我们扩展类型系统,提高代码的可读性和可维护性。通过可选协议,我们能够更好地约束变量、函数、对象的类型,可以在很大程度上保证程序的质量。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a776cb48841e98943f6086