TypeScript 的知识点涵盖了许多方面,以下是一些主要的 TypeScript 知识点:
1. 概述与特性
- TypeScript 是 JavaScript 的超集,由微软开发的开源编程语言。
- 提供静态类型系统,通过类型注解提高代码的可维护性和可靠性。
- 支持最新的 ECMAScript 标准(如 ES6、ES7、ES8 等)并提供了额外的语言特性。
2. 类型系统
- 基本数据类型:
number
,string
,boolean
,null
,undefined
,void
,any
,never
. - 复杂数据类型:
object
,array
,tuple
,enum
,interface
,type alias
,literal types
,union types
,intersection types
,mapped types
,optional properties
,readonly properties
.
3. 变量声明与赋值
-
let
和const
关键字代替传统的var
,支持块级作用域和暂时性死区(TDZ)。 - 类型注解:在变量声明时指定其类型,如
let myVar: string = 'example';
.
4. 函数
- 函数类型注解:定义函数参数和返回值的类型。
- 可选参数、默认参数和剩余参数。
- 箭头函数语法和表达式体函数。
5. 类与面向对象编程
- 类的定义、继承和访问修饰符(
public
,private
,protected
)。 - 抽象类和接口:定义类型的蓝图,可以包含方法和属性签名。
-
static
成员和constructor
方法。
6. 模块系统
- ES6 模块导入与导出语句。
- CommonJS (
require
) 和 AMD (define
) 模块系统的兼容性。
7. 泛型
- 创建可重用的组件和函数,处理多种数据类型。
- 泛型类、接口和函数。
8. 高级类型
- 类型推断:编译器自动推断变量、函数参数和返回值的类型。
- 类型守卫:使用
typeof
,instanceof
,in
等操作符或自定义类型保护函数来确保类型安全。 - 条件类型:根据条件动态地确定类型。
9. 工具与配置
- TypeScript 编译器(
tsc
)的使用和配置选项。 - 使用
tsconfig.json
配置项目设置。 - Linting 工具(如 TSLint 或 ESLint)和格式化工具(如 Prettier)的集成。
枚举
TypeScript 中的枚举(Enums)是一种特殊的类型,它允许你定义一组命名的常量值。以下是一些关于 TypeScript 枚举的知识点:
1. 基本用法
enum Color {
Red,
Green,
Blue,
}
在这个例子中,我们定义了一个名为 Color
的枚举,它有三个成员:Red
, Green
, Blue
。默认情况下,枚举成员的值是从 0 开始自动递增的整数。
2. 自定义枚举值
enum Color {
Red = 1,
Green = 2,
Blue = 4,
}
你也可以为枚举成员指定自定义的数值。在这个例子中,我们将 Red
设为 1,Green
设为 2,Blue
设为 4。
3. 反向映射
TypeScript 枚举具有反向映射功能,这意味着你可以通过枚举值来获取对应的枚举名。
enum Color {
Red,
Green,
Blue,
}
let colorName: string = Color[2]; // colorName 等于 "Green"
4. 字符串枚举
TypeScript 也支持字符串枚举,每个枚举成员都是一个字符串。
enum Color {
Red = 'red',
Green = 'green',
Blue = 'blue',
}
5. 常量枚举
常量枚举在编译时会被替换为其实际值,这可以提高代码的运行效率。
const enum Color {
Red,
Green,
Blue,
}
注意:常量枚举不能使用计算成员或引用其他枚举成员。
6. 混合枚举
你可以在同一个枚举中混合使用数字和字符串枚举成员。
enum Color {
Red = 1,
Green = 'green',
Blue = 3,
}
枚举在 TypeScript 中是一个非常有用的特性,可以帮助你更好地组织和管理常量值,提高代码的可读性和维护性。然而,过度使用枚举也可能导致代码复杂性增加,因此在实际项目中需要根据具体情况权衡使用。
类型别名
类型别名(Type Aliases)是对现有类型进行重新命名的一种方式。类型别名与接口类似,但类型别名没有实现继承和实现继承。
type StringOrNumber = string | number;
类型别名与接口的主要区别在于,类型别名不会在编译时进行检查,因此在开发阶段可以更方便地进行。
以下是一些自定义类型别名的例子:
1. 基础类型别名
type MyString = string;
type MyNumber = number;
type MyBoolean = boolean;
2. 数组类型别名
type MyNumberArray = number[];
type MyStringArray = string[];
type MyBooleanArray = boolean[];
3. 元组类型别名
type MyTuple = [string, number];
4. 枚举类型别名
enum Color {
Red,
Green,
Blue,
}
type MyColor = Color;
5. 对象类型别名
type Person = {
name: string;
age: number;
};
6. 联合类型别名
type MyUnion = string | number;
7. 类型参数和泛型别名
type MyGenericType<T> = { value: T };
8. 类型约束别名
type MyRestrictedString = string & { maxLength: number };
9. 接口类型别名
interface IPerson {
name: string;
age: number;
}
type PersonAlias = IPerson;
在定义了类型别名后,你就可以在你的代码中像使用原始类型一样使用这些别名。这不仅可以提高代码的可读性,还可以帮助你在多个地方保持类型的一致性。
网友评论