admin管理员组文章数量:1487745
TypeScript 中的高级类型
一、是什么
在 TypeScript 中,除了基本类型如 string
、number
、boolean
之外,还存在一系列高级类型。这些高级类型是 TypeScript 为了增加语言灵活性和应对复杂开发场景而提供的一些语言特性。
二、有哪些
以下是一些常见的高级类型及其应用:
交叉类型
交叉类型通过 &
操作符将多个类型合并为一个类型,新类型包含了所有合并类型的特性。
语法:
T & U
示例:
代码语言:javascript代码运行次数:0运行复制function extend<T, U>(first: T, second: U): T & U {
let result: T & U = { ...first, ...second };
return result;
}
联合类型
联合类型表示一个值可以是几种类型之一,使用 |
操作符定义。
语法:
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
,用于获取一个类型中所有键的联合类型。
示例:
interface Button {
type: string;
text: string;
}
type ButtonKeys = keyof Button; // "type" | "text"
类型约束
类型约束通过 extends
关键字对泛型进行限制。
示例:
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
关键字对已有类型的键进行遍历和操作。
示例:
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 中的高级类型
版权声明:本文标题:TypeScript 中的高级类型 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/shuma/1754929598a3181374.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论