我正在调用 axios 并传入一个配置对象,如下所示:
const req = { method, url, timeout: 300000, headers: { 'Content-Type': 'application/json' } }
axios(req)
Run Code Online (Sandbox Code Playgroud)
我收到一个打字稿错误,显示“没有重载与此调用匹配”。axios 函数采用以下类型的配置对象AxiosRequestConfig:
axios(config: AxiosRequestConfig): AxiosPromise<any>
供您参考,以下是类型的AxiosRequestConfig外观以及类型Method:
interface AxiosRequestConfig {
url?: string;
method?: Method;
baseURL?: string;
transformRequest?: AxiosTransformer | AxiosTransformer[];
transformResponse?: AxiosTransformer | AxiosTransformer[];
headers?: any;
params?: any;
paramsSerializer?: (params: any) => string;
data?: any;
timeout?: number;
timeoutErrorMessage?: string;
withCredentials?: boolean;
adapter?: AxiosAdapter;
auth?: AxiosBasicCredentials;
responseType?: ResponseType;
xsrfCookieName?: string;
xsrfHeaderName?: string;
onUploadProgress?: (progressEvent: any) => void;
onDownloadProgress?: …Run Code Online (Sandbox Code Playgroud) 我看到一些我不理解的非常奇怪的 TypeScript 行为。这是场景:
我有三个不同的界面来描述一个事件。他们看起来像这样
interface ReceiveMessageEvent {
event: 'receive-message';
payload: {
action: 'receive-message';
businessSMSId: number;
message: {
businessSMSId: number;
from: string;
to: string;
};
};
}
interface ReadMessageEvent {
event: 'read-message';
payload: {
action: 'read-message';
businessSMSId: number;
customerNumber: string;
inboxNumber: string;
};
}
interface SetThreadsEvent {
event: 'set-threads';
threads: any[];
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,所有三个接口都有event一个特定字符串的属性,这意味着只能有三个可能的选项,“receive-message”、“read-message”或“set-threads”。这很重要,因为接下来我有一个 switch 语句,其中的情况是此事件属性:
switch (action.payload.event) {
case 'receive-message':
// ...
case 'read-message':
// ...
case 'set-threads':
// ...
}
Run Code Online (Sandbox Code Playgroud)
因此,由于 case 是事件属性,我希望 TypeScript 能够根据我们所处的情况知道其余数据的形状。现在,是否正确执行此操作(正如我所期望的那样),除了在一个特定的场景中,这就是我的困惑所在。这种情况是当我在 .filter 方法的回调函数内部时。
例如: …