交叉类型合并多个类型,联合类型支持多态输入,条件类型实现类型逻辑判断,映射类型转换属性,infer推断类型,递归与模板字面量增强表达力,共同构建TypeScript高阶类型系统。

JavaScript 的类型系统在原始设计中是动态且灵活的,这带来了编码的自由度,也增加了运行时出错的风险。TypeScript 通过静态类型检查扩展了 JavaScript,在大型项目中显著提升了代码的可维护性与开发效率。而掌握 TypeScript 的进阶类型编程,是构建高复用、强类型应用的关键。
交叉类型(Intersection Types)允许你将多个类型合并为一个,常用于混入(mixin)模式或组合对象结构。
例如:
type A = { name: string };
type B = { age: number };
type Person = A & B;
const person: Person = { name: 'Alice', age: 25 };
这里 Person 类型同时具备 name 和 age 属性。
立即学习“Java免费学习笔记(深入)”;
联合类型(Union Types)表示一个值可以是多种类型之一,适合处理不确定输入的场景。
比如:
function printId(id: string | number) {
console.log('ID:', id);
}
使用联合类型时,TypeScript 要求你在操作前进行类型缩小(narrowing),如通过 typeof 判断。
条件类型让你根据类型关系动态选择类型,语法为 T extends U ? X : Y。
例如判断是否为函数类型:
type IsFunction
当传入函数类型时返回 true,否则返回 false。
TypeScript 会对裸类型参数(即未包装的泛型)在联合类型中做分布式计算。例如:
type ToArray<T> = T extends any ? T[] : never;
type StrArrOrNumArr = ToArray<string | number>; // string[] | number[]
这种“分布性”使得条件类型在处理复杂映射时非常强大。
映射类型基于已有类型创建新类型,通过遍历属性来修改其修饰符或类型。
常见用法:
易语言入门教程 CHM,介绍易语言的系统基本数据类型、常量表、运算符、位运算命令以及易语言支持库方面的问题,易语言所编写的程序运行时都需要加载易语言的支持库文件.表面上易语言的非独立编译所生成的EXE程序体积小巧.但事实上若想把软件发布出去给别人的电脑上使用.非独立编译将面临很多的问题.所以实际应用时应全部进行独立编译。
0
也可以自定义映射类型:
type OptionalProps<T> = {
[P in keyof T]?: T[P];
};
它等价于 Partial<T>,展示了如何手动控制属性的可选性。
infer 关键字用于在条件类型中声明待推断的类型变量。
典型例子是从函数返回值中提取类型:
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;
当 T 是函数时,infer R 捕获其返回类型,并作为结果返回。
还可用于提取数组元素类型:
type ElementType<T> = T extends (infer U)[] ? U : T;
若 T 是数组,则返回元素类型 U,否则返回 T 本身。
TypeScript 支持递归定义类型,适用于树形结构或嵌套对象。
例如定义一个无限层级的 JSON 类型:
type Json =
string | number | boolean | null |
Json[] | { [key: string]: Json };
注意避免无限展开导致编译错误。
模板字面量类型(Template Literal Types)结合字符串字面量和类型运算,实现更精确的字符串约束。
例如:
type Size = 'small' | 'large';
type Color = 'red' | 'blue';
type Style = `${Size}-${Color}`;
const s: Style = 'small-red'; // OK
这在构建 CSS 类名或事件名称时特别有用。
基本上就这些。掌握这些进阶类型机制后,你可以编写高度抽象、类型安全的工具类型和泛型组件,让 TypeScript 成为你代码结构的坚实骨架。不复杂但容易忽略的是细节上的类型分布与推断时机,多实践才能熟练运用。
以上就是JavaScript类型系统_TypeScript进阶类型编程指南的详细内容,更多请关注php中文网其它相关文章!
编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号