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

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,可以编写出更加安全、规范的代码。

相关文章:

  • 轻松上手:使用 Docker Compose 部署 TiDB 的简易指南
  • 多模态革命!拆解夸克AI相机技术架构:如何用视觉搜索重构信息交互?(附开源方案对比)
  • 6.进程概念(中)
  • TCP vs UDP:核心区别、握手过程与应用场景(附对比图)
  • Git-基本操作
  • 人工智能数学基础(一):人工智能与数学
  • 什么是公共数据?公共数据开放后如何提高新质生产力发展?
  • SQL知识点合集---第二弹
  • 软考-软件设计师中级备考 5、数据结构 树和二叉树
  • 高级数据库对象全面解析:视图、存储过程与触发器
  • HTML5 WebSocket:实现高效实时通讯
  • 喷泉码技术在现代物联网中的应用的总结和参考文献
  • 人工智能数学基础(二):初等数学
  • UniApp 实现分享功能
  • uniapp打包apk如何实现版本更新
  • “数字驱动·智建未来——2025河北省建筑电气与智能化技术交流大会”
  • C++实时统计数据均值、方差和标准差
  • python如何用递归函数求1+2+3+4+5的值
  • 【linux】一文掌握 Tmux 的各种指令(Tmux备忘清单)
  • 开源CMS系统的SEO优化功能主要依赖哪些插件?
  • 中方会否公布铁线礁的领海基线?外交部:中方执法活动旨在反制菲方侵权挑衅
  • “90后”高层建筑返青春:功能调整的技术路径和运营考验
  • 剪纸纹样“流动”在水乡,谁不忆江南
  • 双拥主题歌曲MV:爱我人民,爱我军
  • 马上评丨马拉松“方便门”被处罚,是一针清醒剂
  • 大理洱源4.8级地震致442户房屋受损,无人员伤亡