类型定义
本页记录了 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
interface NamedCapable {
name: string;
}源码: packages/fetcher/src/types.ts:141
FetcherConfigurer
用于配置 Fetcher 实例的接口:
interface FetcherConfigurer {
applyTo(fetcher: Fetcher): void;
}源码: packages/fetcher/src/types.ts:248
请求类型
HttpMethod
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
interface RequestHeaders {
'Content-Type'?: string;
Accept?: string;
Authorization?: string;
[key: string]: string | undefined;
}源码: packages/fetcher/src/fetchRequest.ts:68
RequestBodyType
type RequestBodyType = BodyInit | Record<string, any> | string | null;源码: packages/fetcher/src/fetchRequest.ts:88
FetchRequestInit
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
interface FetchRequest<BODY extends RequestBodyType = RequestBodyType>
extends FetchRequestInit<BODY> {
url: string;
}源码: packages/fetcher/src/fetchRequest.ts:176
UrlParams
interface UrlParams {
path?: Record<string, any>;
query?: Record<string, any>;
}源码: packages/fetcher/src/urlBuilder.ts:27
配置类型
FetcherOptions
interface FetcherOptions extends BaseURLCapable, RequestHeadersCapable, TimeoutCapable {
urlTemplateStyle?: UrlTemplateStyle;
interceptors?: InterceptorManager;
validateStatus?: ValidateStatus;
}源码: packages/fetcher/src/fetcher.ts:51
RequestOptions
interface RequestOptions extends AttributesCapable, ResultExtractorCapable {}源码: packages/fetcher/src/fetcher.ts:94
ValidateStatus
type ValidateStatus = (status: number) => boolean;源码: packages/fetcher/src/validateStatusInterceptor.ts:62
能力接口
这些接口定义了类型可以实现的"能力":
| 接口 | 属性 | 类型 | 源码 |
|---|---|---|---|
BaseURLCapable | baseURL | string | fetchRequest.ts:23 |
RequestHeadersCapable | headers? | RequestHeaders | fetchRequest.ts:81 |
TimeoutCapable | timeout? | number | timeout.ts |
UrlParamsCapable | urlParams? | UrlParams | fetchRequest.ts:48 |
UrlBuilderCapable | urlBuilder | UrlBuilder | urlBuilder.ts:154 |
ResultExtractorCapable | resultExtractor? | ResultExtractor<any> | resultExtractor.ts:31 |
AttributesCapable | attributes? | Record<string, any> | Map<string, any> | fetchExchange.ts:23 |
拦截器类型
Interceptor
interface Interceptor extends NamedCapable, OrderedCapable {
readonly name: string;
readonly order: number;
intercept(exchange: FetchExchange): void | Promise<void>;
}源码: packages/fetcher/src/interceptor.ts:44
特化拦截器接口
interface RequestInterceptor extends Interceptor {}
interface ResponseInterceptor extends Interceptor {}
interface ErrorInterceptor extends Interceptor {}这三个接口都扩展了 Interceptor,没有添加新成员。它们的存在是为了语义清晰和类型区分。
源码: packages/fetcher/src/interceptor.ts:111-164
结果提取器类型
interface ResultExtractor<R> {
(exchange: FetchExchange): R | Promise<R>;
}源码: packages/fetcher/src/resultExtractor.ts:23
错误类型
类型层级
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| 类 | 包 | 源码 |
|---|---|---|
FetcherError | fetcher | fetcherError.ts:37 |
ExchangeError | fetcher | fetcherError.ts:86 |
HttpStatusValidationError | fetcher | validateStatusInterceptor.ts:27 |
AutoGenerated | decorator | generated.ts:25 |
EventBus 类型(@ahoo-wang/fetcher-eventbus)
源码: packages/eventbus/src/types.ts
EventHandler
interface EventHandler<EVENT> extends NamedCapable, OrderedCapable {
once?: boolean;
handle(event: EVENT): void | Promise<void>;
}EventBus
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
enum PromiseStatus {
IDLE = 'idle',
LOADING = 'loading',
SUCCESS = 'success',
ERROR = 'error',
}源码: packages/react/src/core/usePromiseState.ts:22
PromiseState
interface PromiseState<R, E = unknown> {
status: PromiseStatus;
loading: boolean;
result: R | undefined;
error: E | undefined;
}源码: packages/react/src/core/usePromiseState.ts:29
PromiseSupplier
type PromiseSupplier<R> = (abortController: AbortController) => Promise<R>;源码: packages/react/src/core/useExecutePromise.ts:51
QueryOptions
interface QueryOptions<Q> {
initialQuery?: Q;
query?: Q;
}源码: packages/react/src/core/useQueryState.ts:17
AutoExecuteCapable
interface AutoExecuteCapable {
autoExecute?: boolean; // 默认为 true
}源码: packages/react/src/types.ts:20
装饰器类型(@ahoo-wang/fetcher-decorator)
ParameterType
enum ParameterType {
PATH = 'path',
QUERY = 'query',
HEADER = 'header',
BODY = 'body',
REQUEST = 'request',
ATTRIBUTE = 'attribute',
}源码: packages/decorator/src/parameterDecorator.ts:19
ParameterMetadata
interface ParameterMetadata {
type: ParameterType;
name?: string;
index: number;
}源码: packages/decorator/src/parameterDecorator.ts:136
EndpointReturnType
enum EndpointReturnType {
EXCHANGE = 'Exchange',
RESULT = 'Result',
}源码: packages/decorator/src/endpointReturnTypeCapable.ts:14
ParameterRequest
interface ParameterRequest<BODY extends RequestBodyType = RequestBodyType>
extends FetchRequestInit<BODY>, PathCapable {}源码: packages/decorator/src/parameterDecorator.ts:352
类型关系图
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<R>"]
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>() 方法:
declare global {
interface Response {
json<T = any>(): Promise<T>;
}
}源码: packages/fetcher/src/types.ts:162
React Hook 类型组合
graph TD
subgraph sg_1 ["usePromiseState"]
PS["PromiseState<R, E>"]
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相关页面
- Fetcher 客户端 API -- 如何在实践中使用这些类型
- 装饰器 API -- 装饰器相关类型
- React Hooks API -- React Hook 类型
- API 概览 -- 包摘要