我有一个函数,它是一个包装器axios.request.
我发送一个消息类型和配置,以便我可以创建一个新的消息response.data.
我有多种类型的消息,所以我创建了一个泛型TMessage类型来处理这个:
public request<TMessage extends BaseMessage<TMessage>>(
config: Axios.AxiosXHRConfig<any>,
messageType: {new (message: string): TMessage}
): Promise<TMessage> {
return new Promise((resolve, reject) => {
axios.request(config).then((response: Axios.AxiosXHR<any>) => {
try {
let message = new messageType(response.data);
resolve(message);
} catch (err) {
reject(err);
}
}, reject);
});
}
Run Code Online (Sandbox Code Playgroud)
我现在可以使用消息类型请求并知道我得到的响应类型:
RestClient.request(config, SomeMessage).then((response: SomeMessage) => {
// response is of type SomeMessage, I have intellisense to help
resolve(response);
});
Run Code Online (Sandbox Code Playgroud)
我想使这个messageType可选,因为一些请求没有有用的响应,不需要实例化为新消息.
TypeScript中有没有办法做到这一点?以下代码使用联合类型和编译,但它不强制使用messageType来匹配返回类型,这使得它有点多余.
Promise<TMessage>如果提供了messageType,我想要一个返回类型.否则我想要一个Promise<Axios.AxiosXHR<any>>返回类型
public request<TMessage extends BaseMessage<TMessage>>( …Run Code Online (Sandbox Code Playgroud)