Skip to content

类型定义

本页记录了 Fetcher 生态系统中使用的关键 TypeScript 接口和类型。类型按包和类别组织。

核心类型(@ahoo-wang/fetcher

工具类型

源码: packages/fetcher/src/types.ts

类型签名描述
PartialBy<T, K>Omit<T, K> & Partial<Pick<T, K>>将指定键设为可选
RequiredBy<T, K>Omit<T, K> & Required<Pick<T, K>>将指定键设为必填
RemoveReadonlyFields<T>映射类型移除所有只读属性

NamedCapable

typescript
interface NamedCapable {
  name: string;
}

源码: packages/fetcher/src/types.ts:141

FetcherConfigurer

用于配置 Fetcher 实例的接口:

typescript
interface FetcherConfigurer {
  applyTo(fetcher: Fetcher): void;
}

源码: packages/fetcher/src/types.ts:248

请求类型

HttpMethod

typescript
enum HttpMethod {
  GET = 'GET',
  POST = 'POST',
  PUT = 'PUT',
  DELETE = 'DELETE',
  PATCH = 'PATCH',
  HEAD = 'HEAD',
  OPTIONS = 'OPTIONS',
  TRACE = 'TRACE',
}

源码: packages/fetcher/src/fetchRequest.ts:37

RequestHeaders

typescript
interface RequestHeaders {
  'Content-Type'?: string;
  Accept?: string;
  Authorization?: string;
  [key: string]: string | undefined;
}

源码: packages/fetcher/src/fetchRequest.ts:68

RequestBodyType

typescript
type RequestBodyType = BodyInit | Record<string, any> | string | null;

源码: packages/fetcher/src/fetchRequest.ts:88

FetchRequestInit

typescript
interface FetchRequestInit<BODY extends RequestBodyType = RequestBodyType>
  extends TimeoutCapable, RequestHeadersCapable, UrlParamsCapable,
    Omit<RequestInit, 'body' | 'headers'> {
  body?: BODY;
  abortController?: AbortController;
}

源码: packages/fetcher/src/fetchRequest.ts:112

FetchRequest

typescript
interface FetchRequest<BODY extends RequestBodyType = RequestBodyType>
  extends FetchRequestInit<BODY> {
  url: string;
}

源码: packages/fetcher/src/fetchRequest.ts:176

UrlParams

typescript
interface UrlParams {
  path?: Record<string, any>;
  query?: Record<string, any>;
}

源码: packages/fetcher/src/urlBuilder.ts:27

配置类型

FetcherOptions

typescript
interface FetcherOptions extends BaseURLCapable, RequestHeadersCapable, TimeoutCapable {
  urlTemplateStyle?: UrlTemplateStyle;
  interceptors?: InterceptorManager;
  validateStatus?: ValidateStatus;
}

源码: packages/fetcher/src/fetcher.ts:51

RequestOptions

typescript
interface RequestOptions extends AttributesCapable, ResultExtractorCapable {}

源码: packages/fetcher/src/fetcher.ts:94

ValidateStatus

typescript
type ValidateStatus = (status: number) => boolean;

源码: packages/fetcher/src/validateStatusInterceptor.ts:62

能力接口

这些接口定义了类型可以实现的"能力":

接口属性类型源码
BaseURLCapablebaseURLstringfetchRequest.ts:23
RequestHeadersCapableheaders?RequestHeadersfetchRequest.ts:81
TimeoutCapabletimeout?numbertimeout.ts
UrlParamsCapableurlParams?UrlParamsfetchRequest.ts:48
UrlBuilderCapableurlBuilderUrlBuilderurlBuilder.ts:154
ResultExtractorCapableresultExtractor?ResultExtractor<any>resultExtractor.ts:31
AttributesCapableattributes?Record<string, any> | Map<string, any>fetchExchange.ts:23

拦截器类型

Interceptor

typescript
interface Interceptor extends NamedCapable, OrderedCapable {
  readonly name: string;
  readonly order: number;
  intercept(exchange: FetchExchange): void | Promise<void>;
}

源码: packages/fetcher/src/interceptor.ts:44

特化拦截器接口

typescript
interface RequestInterceptor extends Interceptor {}
interface ResponseInterceptor extends Interceptor {}
interface ErrorInterceptor extends Interceptor {}

这三个接口都扩展了 Interceptor,没有添加新成员。它们的存在是为了语义清晰和类型区分。

源码: packages/fetcher/src/interceptor.ts:111-164

结果提取器类型

typescript
interface ResultExtractor<R> {
  (exchange: FetchExchange): R | Promise<R>;
}

源码: packages/fetcher/src/resultExtractor.ts:23

错误类型

类型层级

mermaid
classDiagram
    class Error {
        +message: string
        +stack?: string
    }
    class FetcherError {
        +cause?: Error | unknown
        +name: "FetcherError"
    }
    class ExchangeError {
        +exchange: FetchExchange
        +name: "ExchangeError"
    }
    class HttpStatusValidationError {
        +name: "HttpStatusValidationError"
    }
    class AutoGenerated {
        +name: "AutoGenerated"
    }

    Error <|-- FetcherError
    FetcherError <|-- ExchangeError
    ExchangeError <|-- HttpStatusValidationError
    Error <|-- AutoGenerated

    style Error fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style FetcherError fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style ExchangeError fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style HttpStatusValidationError fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style AutoGenerated fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
源码
FetcherErrorfetcherfetcherError.ts:37
ExchangeErrorfetcherfetcherError.ts:86
HttpStatusValidationErrorfetchervalidateStatusInterceptor.ts:27
AutoGenerateddecoratorgenerated.ts:25

EventBus 类型(@ahoo-wang/fetcher-eventbus

源码: packages/eventbus/src/types.ts

EventHandler

typescript
interface EventHandler<EVENT> extends NamedCapable, OrderedCapable {
  once?: boolean;
  handle(event: EVENT): void | Promise<void>;
}

EventBus

typescript
class EventBus<Events extends Record<EventType, unknown>> {
  on<Key extends EventType>(type: Key, handler: EventHandler<Events[Key]>): boolean;
  off<Key extends EventType>(type: Key, name: string): boolean;
  emit<Key extends EventType>(type: Key, event: Events[Key]): void | Promise<void>;
  destroy(): void;
}

源码: packages/eventbus/src/eventBus.ts:35

React Hook 类型(@ahoo-wang/fetcher-react

PromiseStatus

typescript
enum PromiseStatus {
  IDLE = 'idle',
  LOADING = 'loading',
  SUCCESS = 'success',
  ERROR = 'error',
}

源码: packages/react/src/core/usePromiseState.ts:22

PromiseState

typescript
interface PromiseState<R, E = unknown> {
  status: PromiseStatus;
  loading: boolean;
  result: R | undefined;
  error: E | undefined;
}

源码: packages/react/src/core/usePromiseState.ts:29

PromiseSupplier

typescript
type PromiseSupplier<R> = (abortController: AbortController) => Promise<R>;

源码: packages/react/src/core/useExecutePromise.ts:51

QueryOptions

typescript
interface QueryOptions<Q> {
  initialQuery?: Q;
  query?: Q;
}

源码: packages/react/src/core/useQueryState.ts:17

AutoExecuteCapable

typescript
interface AutoExecuteCapable {
  autoExecute?: boolean; // 默认为 true
}

源码: packages/react/src/types.ts:20

装饰器类型(@ahoo-wang/fetcher-decorator

ParameterType

typescript
enum ParameterType {
  PATH = 'path',
  QUERY = 'query',
  HEADER = 'header',
  BODY = 'body',
  REQUEST = 'request',
  ATTRIBUTE = 'attribute',
}

源码: packages/decorator/src/parameterDecorator.ts:19

ParameterMetadata

typescript
interface ParameterMetadata {
  type: ParameterType;
  name?: string;
  index: number;
}

源码: packages/decorator/src/parameterDecorator.ts:136

EndpointReturnType

typescript
enum EndpointReturnType {
  EXCHANGE = 'Exchange',
  RESULT = 'Result',
}

源码: packages/decorator/src/endpointReturnTypeCapable.ts:14

ParameterRequest

typescript
interface ParameterRequest<BODY extends RequestBodyType = RequestBodyType>
  extends FetchRequestInit<BODY>, PathCapable {}

源码: packages/decorator/src/parameterDecorator.ts:352

类型关系图

mermaid
graph TB
    subgraph sg_1 ["Fetcher Options"]
        FO["FetcherOptions"]
        RO["RequestOptions"]
        VS["ValidateStatus"]
    end

    subgraph sg_2 ["Request Types"]
        FRI["FetchRequestInit"]
        FR["FetchRequest"]
        UP["UrlParams"]
        RH["RequestHeaders"]
    end

    subgraph sg_3 ["Exchange"]
        FE["FetchExchange"]
        FEI["FetchExchangeInit"]
    end

    subgraph sg_4 ["Interceptors"]
        INT["Interceptor"]
        RI["InterceptorRegistry"]
        IM["InterceptorManager"]
    end

    subgraph sg_5 ["Extractors"]
        RE["ResultExtractor&lt;R&gt;"]
        RES["ResultExtractors"]
    end

    subgraph sg_6 ["Errors"]
        FErr["FetcherError"]
        EErr["ExchangeError"]
        HErr["HttpStatusValidationError"]
    end

    FO -->|"creates"| IM
    FO -->|"configures"| VS
    FRI -->|"extends"| FR
    FR -->|"flows through"| FE
    FE -->|"processed by"| IM
    IM -->|"manages"| RI
    RI -->|"executes"| INT
    FE -->|"extracted by"| RE
    FErr -->|"extended by"| EErr
    EErr -->|"extended by"| HErr

    style FO fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style FR fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style FE fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style IM fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style INT fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style RE fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style FErr fill:#2d333b,stroke:#6d5dfc,color:#e6edf3

全局类型扩展

Fetcher 扩展了全局 Response 接口,添加了泛型 json<T>() 方法:

typescript
declare global {
  interface Response {
    json<T = any>(): Promise<T>;
  }
}

源码: packages/fetcher/src/types.ts:162

React Hook 类型组合

mermaid
graph TD
    subgraph sg_1 ["usePromiseState"]
        PS["PromiseState&lt;R, E&gt;"]
        PSE["UsePromiseStateReturn"]
    end

    subgraph sg_2 ["useExecutePromise"]
        EPS["UseExecutePromiseOptions"]
        EPR["UseExecutePromiseReturn"]
    end

    subgraph sg_3 ["useQuery"]
        QO["UseQueryOptions"]
        QR["UseQueryReturn"]
    end

    subgraph sg_4 ["useFetcher"]
        FO["UseFetcherOptions"]
        FR["UseFetcherReturn"]
    end

    PS --> PSE
    PSE --> EPR
    EPS --> EPR
    EPS --> QO
    EPR --> QR
    QO --> QR
    EPS --> FO
    EPR --> FR

    style PS fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style PSE fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style EPR fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style QR fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
    style FR fill:#2d333b,stroke:#6d5dfc,color:#e6edf3

相关页面

基于 Apache License 2.0 发布。