1. 结构类型系统
- TypeScript 采用结构类型(Structural Typing),判断类型兼容性时关注的是类型的"形状"(成员属性),而非类型的名称
- 只要两个类型的成员结构兼容,即使它们来自不同的声明,也可以互相赋值
- 这与 Java、C# 等语言的名义类型(Nominal Typing)形成对比
2. 类型兼容性规则
- 赋值和参数传递时,目标类型必须与源类型兼容
- 对象字面量存在" excess property checking"(多余属性检查),直接赋值时会检查是否存在未声明的属性
- 函数类型兼容遵循参数逆变、返回值协变的规则
3. 类型注解与类型推断
- 显式类型注解:通过 : TypeName 语法手动指定类型
- 类型推断:TypeScript 会根据赋值、上下文等信息自动推导变量类型
- 两者可以混合使用,推断结果可通过显式注解覆盖
4. 类型检查的严格程度
- strict 模式:开启所有严格检查选项,包括 noImplicitAny、strictNullChecks、strictFunctionTypes 等
- 非严格模式:允许隐式 any、允许 null/undefined 赋值给任意类型
- TypeScript 7.0 起,strict 模式默认开启