当前位置: 首页 > backend >正文

TypeScript之type

在TypeScript中,type 是一个非常强大的工具,用于定义自定义类型。它可以帮助开发者更灵活地描述数据结构,从而增强代码的类型安全性。与 interface 类似,type 也用于定义类型,但它们在语法和用途上有一些区别。

1. type 的基本用法

type 可以用来定义新的类型别名,这些别名可以是基本类型、联合类型、元组类型、对象类型等。

(1)基本类型别名
type StringOrNumber = string | number;
type StringArray = string[];
type NumberArray = Array<number>;

在上面的例子中:

  • StringOrNumber 是一个联合类型,表示可以是 stringnumber
  • StringArray 是一个字符串数组的类型别名。
  • NumberArray 是一个数字数组的类型别名。
(2)对象类型

type 可以定义对象的结构,类似于 interface

type Point = {x: number;y: number;
};

使用时:

let point: Point = { x: 10, y: 20 };
(3)联合类型

type 可以定义联合类型,表示一个值可以是多种类型之一:

type StringOrNumber = string | number;

使用时:

let value: StringOrNumber = "hello";
value = 123; // 也可以
(4)元组类型

type 可以定义元组类型,表示一个固定长度的数组,每个位置的类型是固定的:

type StringNumberPair = [string, number];

使用时:

let pair: StringNumberPair = ["hello", 123];
(5)函数类型

type 可以定义函数的类型,包括参数类型和返回值类型:

type SearchFunc = (source: string, subString: string) => boolean;

使用时:

let mySearch: SearchFunc = function (source: string, subString: string): boolean {return source.search(subString) !== -1;
};

2. type 的高级用法

(1)交叉类型

type 可以使用交叉类型(&)来组合多个类型:

type Person = { name: string; age: number };
type Loggable = { log: () => void };type PersonWithLogging = Person & Loggable;

使用时:

let person: PersonWithLogging = {name: "Alice",age: 25,log() {console.log(`Name: ${this.name}, Age: ${this.age}`);}
};
(2)条件类型

type 可以定义条件类型,根据条件动态生成类型:

type IsNumber<T> = T extends number ? "Yes" : "No";

使用时:

type IsNumberResult1 = IsNumber<42>; // "Yes"
type IsNumberResult2 = IsNumber<string>; // "No"
(3)映射类型

type 可以定义映射类型,将一个类型的所有属性映射为新的类型:

type OptionsFlags<Type> = {[Property in keyof Type]: boolean;
};type FeatureFlags = {darkMode: () => void;newUserProfile: () => void;
};type FeatureOptions = OptionsFlags<FeatureFlags>; // { darkMode: boolean; newUserProfile: boolean }
(4)递归类型

type 可以定义递归类型,例如树形结构:

type Tree<T> = {value: T;children?: Tree<T>[];
};

使用时:

let tree: Tree<string> = {value: "root",children: [{value: "child1",children: [{ value: "grandchild1" }, { value: "grandchild2" }]},{value: "child2"}]
};

3. typeinterface 的区别

  • interface
    • 主要用于定义对象的结构。
    • 支持扩展(extends)和合并(多个接口可以合并为一个)。
    • 通常用于描述对象的形状。
  • type
    • 更通用,可以定义任何类型的别名,包括联合类型、元组类型、函数类型等。
    • 不支持扩展(extends),但可以通过交叉类型(&)实现类似功能。
    • 更灵活,可以用于复杂的类型操作,如条件类型、映射类型等。

4. 总结

type 是TypeScript中非常强大的工具,它可以帮助开发者定义灵活的类型别名,从而增强代码的类型安全性。通过合理使用 type,可以编写出更加安全、规范的代码。

http://www.xdnf.cn/news/2851.html

相关文章:

  • IEEE会议:第十届网络安全与信息工程国际会议(ICCSIE 2025)
  • 资产定位解决方案:蓝牙Beacon如何实现低成本高效追踪
  • 【Android】谈谈DexClassLoader
  • dx11 龙书学习 第四章 dx11 准备工作
  • Unity AI-使用Ollama本地大语言模型运行框架运行本地Deepseek等模型实现聊天对话(二)
  • 天梯——链表去重
  • 基于STM32、HAL库的ATSHA204A安全验证及加密芯片驱动程序设计
  • 深度学习大模型: AI 阅卷替代人工阅卷
  • Field访问对象int字段,对象访问int字段,通过openjdk17 C++源码看对象字段访问原理
  • J-Link RTT打印输出调试信息
  • 深入蜂窝物联网:第二章 深度解读 NB-IoT:协议栈、部署与典型应用
  • 两地三中心
  • MySQL数据库(14)—— 使用C操作MySQL
  • 【ACL系列论文写作指北03-相关工作怎么写】-展示视野与定位创新
  • leetcode283-移动零
  • 第二章 信息技术发展(2.2 新一代信息技术及应用)
  • Linux428 chmod 0xxx 1xxx 2xxx 4xxx;umask;chown 属主属组 软件包rpm
  • ECharts散点图-散点图20,附视频讲解与代码下载
  • php数据库连接
  • Docker安装的mysql限制ip访问
  • [三分钟]web自动化测试(三):selenium自动化测试常用函数(下)
  • 基于蓝牙Beacon人员导航方案
  • 【Linux】第十二章 安装和更新软件包
  • 第七章:Server/Client Communication
  • 增量抽取的场景下,周期快照表最新分区的数据是如何生成?
  • 安卓开发学习随记
  • OpenCV 图形API(69)图像与通道拼接函数------将一个 GMat 类型的对象转换为另一个具有不同深度GMat对象函数convertTo()
  • vue3使其另一台服务器上的x.html,实现x.html调用中的函数,并向其传递数据。
  • kylin v10 + argo + ascend 310p多机多卡 pytorch distributed 训练
  • JavaWeb学习打卡-Day4-会话技术、JWT、Filter、Interceptor