高级类型
TypeScript 的高级类型使得在处理更复杂的数据结构时,可以更细致地控制类型的行为和检查,增强了类型系统的表达能力。
联合类型与类型保护
联合类型(|)表示变量可以是多种类型中的一种。类型保护(typeof, instanceof, in)可以帮助确定变量的具体类型。
function print(value: string | number) {
if (typeof value === "string") {
console.log("String:", value);
} else {
console.log("Number:", value);
}
}
类型断言与非空断言
类型断言
类型断言允许告诉 TypeScript 我们已经知道某个变量的具体类型:
let someValue: any = "Hello";
let strLength: number = (someValue as string).length;
非空断言(!)
使用 ! 断言非 null 或 undefined:
let element = document.getElementById("myElement");
element!.textContent = "Hello!";
字面量类型
字面量类型是对某个特定值的精确描述,常用于更细粒度的类型约束。
type Direction = "up" | "down" | "left" | "right";
let move: Direction = "up"; // 只允许这些字面量值
映射类型
映射类型用于创建新类型,它基于给定的类型并对其做一些变换。
type ReadOnly<T> = {
readonly [K in keyof T]: T[K];
};
type Person = { name: string; age: number };
type ReadOnlyPerson = ReadOnly<Person>;
// { readonly name: string; readonly age: number }
条件类型
条件类型根据类型的不同,决定类型的结构。它们的形式是 T extends U ? X : Y。
type IsString<T> = T extends string ? "Yes" : "No";
type Test1 = IsString<string>; // "Yes"
type Test2 = IsString<number>; // "No"
keyof、typeof、infer 等关键字用法
keyof
keyof 返回一个类型的键名组成的联合类型:
type Person = { name: string; age: number };
type PersonKeys = keyof Person; // "name" | "age"
typeof
typeof 用于获取变量的类型:
let person = { name: "John", age: 30 };
type PersonType = typeof person; // { name: string; age: number }
infer
infer 用于推断类型,是一种在条件类型中使用的关键字:
type ReturnType<T> = T extends (a: any) => infer R ? R : never;
type Func = (x: number) => string;
type ReturnTypeOfFunc = ReturnType<Func>; // string
高级类型使得 TypeScript 的类型系统更加强大,开发者可以根据需求实现更复杂的类型推断与约束,提升代码的安全性与可维护性。
相关内容
- 函数与类型 TypeScript 中函数相关的类型注解方式,包括参数与返回值类型、可选与默认参数、剩余参数,以及函数重载的用法。
- 接口与对象类型 TypeScript 中接口(interface)与对象类型的使用方法,包括 interface 与 type 的区别、可选与只读属性、索引签名以及函数类型定义...
- TypeScript 简介 TypeScript 是由 Microsoft 开发的开源编程语言,它是 JavaScript 的一个超集(superset),也就是说,所有合法的 JavaS...
- 类型系统基础 TypeScript 中的基本类型系统,包括原始类型、数组与元组、枚举、any 与 unknown 类型、类型别名与交叉类型等内容。
- 类与面向对象 TypeScript 中类的定义方式、继承机制、访问修饰符,以及如何结合接口使用类,并了解抽象类与多态的基础用法。
- 泛型 TypeScript 中泛型的基本概念和用法,包括泛型函数、接口、类,以及泛型约束和默认类型等,帮助开发者灵活构建通用的类型。