今天在看typescript代码的时候,作为一个小白发现代码中有一个&符号,开始以为是按位与但说不通,最后查了一下是交叉类型。
一. 简介
就是将多个类型合并为一个类型。
interface IPerson { id: string; age: number; } interface IWorker { companyId: string; } type IStaff = IPerson & IWorker; const staff: IStaff = { id: 'E1006', age: 33, companyId: 'EXE' }; console.dir(staff)
二.当合并名相同类型不同时
合并内容会变为never
三.使用
在实际项目开发过程中,我们经常需要开发一些功能函数,为了保证函数的灵活性和可复用性,这些函数往往会定义一些输入参数,而这些参数根据是否必填,又可分为必填参数和可选参数。当必填参数和可选参数有大部分参数是相同的情况下,我们就可以利用 TypeScript 交叉类型来解决复用问题。好了,废话不多说,直接看个示例:
ArgBase接口
export interface ArgBase<T> { name?: string; description?: string; hidden?: boolean; parse: ParseFn<T>; default?: T | (() => T); input?: string; options?: string[]; }
RequiredArg接口
export type RequireArg<T> = ArgeBase<T> & { required: true; value: T }
OptionalArg接口
export type OptionalArg<T> = Argbase<T> & { required: false; valuse?: T; }
顾名思义,ArgBase 接口是基础参数接口,它是 RequiredArg 和 OptionalArg 接口的公共部分。示例代码中,RequiredArg 和 OptionalArg 的差异就是 required 字段和与之对应的 value 值。通过交叉类型,可以让我们更好地进行代码复用,并方便地实现把多种类型叠加到一起成为一种新的类型。