admin管理员组

文章数量:1487745

TypeScript 中的高级类型

一、是什么

在 TypeScript 中,除了基本类型如 stringnumberboolean 之外,还存在一系列高级类型。这些高级类型是 TypeScript 为了增加语言灵活性和应对复杂开发场景而提供的一些语言特性。

二、有哪些

以下是一些常见的高级类型及其应用:

交叉类型

交叉类型通过 & 操作符将多个类型合并为一个类型,新类型包含了所有合并类型的特性。 语法:

代码语言:javascript代码运行次数:0运行复制
T & U

示例:

代码语言:javascript代码运行次数:0运行复制
function extend<T, U>(first: T, second: U): T & U {
    let result: T & U = { ...first, ...second };
    return result;
}
联合类型

联合类型表示一个值可以是几种类型之一,使用 | 操作符定义。 语法:

代码语言:javascript代码运行次数:0运行复制
T | U

示例:

代码语言:javascript代码运行次数:0运行复制
function formatCommandline(command: string[] | string) {
    let line = typeof command === 'string' ? command.trim() : command.join(' ').trim();
}
类型别名

类型别名用来给一个类型起一个新名字,可以用于原始值、联合类型、元组等。 语法:

代码语言:javascript代码运行次数:0运行复制
type SomeName = someValidTypeAnnotation

示例:

代码语言:javascript代码运行次数:0运行复制
type some = boolean | string;
const b: some = true; // ok
const c: some = 'hello'; // ok
// const d: some = 123; // Error

类型别名也可以是泛型:

代码语言:javascript代码运行次数:0运行复制
type Container<T> = { value: T };
类型索引

keyof 类似于 Object.keys,用于获取一个类型中所有键的联合类型。 示例:

代码语言:javascript代码运行次数:0运行复制
interface Button {
    type: string;
    text: string;
}
type ButtonKeys = keyof Button; // "type" | "text"
类型约束

类型约束通过 extends 关键字对泛型进行限制。 示例:

代码语言:javascript代码运行次数:0运行复制
type BaseType = string | number | boolean;
function copy<T extends BaseType>(arg: T): T {
    return arg;
}

类型约束常与类型索引一起使用:

代码语言:javascript代码运行次数:0运行复制
function getValue<T, K extends keyof T>(obj: T, key: K) {
    return obj[key];
}
映射类型

映射类型通过 in 关键字对已有类型的键进行遍历和操作。 示例:

代码语言:javascript代码运行次数:0运行复制
type Readonly<T> = {
    readonly [P in keyof T]: T[P];
};
interface Obj {
    a: string;
    b: string;
}
type ReadOnlyObj = Readonly<Obj>;
条件类型

条件类型是一种根据条件表达式来决定类型的类型。 语法:

代码语言:javascript代码运行次数:0运行复制
T extends U ? X : Y

示例:

代码语言:javascript代码运行次数:0运行复制
type NonNullable<T> = T extends null | undefined ? never : T;

三、总结

TypeScript 的高级类型为开发者提供了强大的工具来处理复杂的类型关系和场景。掌握这些高级类型是深入理解和有效使用 TypeScript 的关键。随着 TypeScript 版本的不断更新,新的特性也在不断加入,因此持续学习和实践是必要的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-10-09,如有侵权请联系 cloudcommunity@tencent 删除typescriptstring泛型索引语法

本文标签: TypeScript 中的高级类型