今天在看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 值。通過交叉類型,可以讓我們更好地進行代碼復用,並方便地實現把多種類型疊加到一起成為一種新的類型。
