HttpClient,使操作字符串类型安全



是否有任何方法可以使下面的"post"操作字符串类型安全?现在它接受任何单词来代替'post',例如'abcd',不会产生编译错误。

示例:

saveUsers(body?: UpdateIdentityUserDto): Observable<any> {
return this.httpClient.request<IdentityUserDtoBaseRequestResponse>('post',`${this.baseUserUrl}`,
{
body: body
}
);
}

选项:

下面是另一个选项,但是,我更喜欢使用上面的字符串选项,因为这些是从Swagger IO代理生成器自动生成的。

saveUsers(body?: UpdateIdentityUserDto): Observable<any> {
return this.httpClient.post<IdentityUserDtoBaseRequestResponse>(`${this.baseUserUrl}`,body);
}

当前使用Angular 10

我建议将其包装起来,并使其成为一个通用方法。为这些泛型创建一个单独的文件。

type HttpMethods = 'post' | 'get' | 'patch' | 'delete';
request<T>(method: HttpMethods, body: any): Observable<any> {
this.httpClient.request<T>(method, this.baseUrl, { body: body });
}

然后,如果你想在一个单独的文件中调用一个api调用,请调用这个

import { request } from '...'
saveUsers(body?: BodyInterface): Observable<ResponseInterface> {
return request<IdentityUserDtoBaseRequestResponse>('post', body)
}

为不同类型的请求方法创建namespace并导出常量。

export namespace RequestMethod {
export const GET:string = "get";
export const HEAD:string = "head";
export const POST:string = "post";
export const PUT:string = "put";
export const DELETE:string = "delete";
export const CONNECT:string = "connect";
export const OPTIONS:string = "options";
export const TRACE:string = "trace";
export const PATCH:string = "patch";
}

然后您可以在service中使用这个名称空间

import { RequestMethod } from '../request-method.ts';
saveUsers(body?: UpdateIdentityUserDto): Observable<any> {
return this.httpClient.request<IdentityUserDtoBaseRequestResponse>(RequestMethod.POST,`${this.baseUserUrl}`,
{
body: body
}
);
}

要明白,这并不能阻止开发人员键入他们想要的任何字符串。但它确实为您提供了一种类型安全的方式,确保您的字符串在团队中作为标准使用时通过应用程序保持一致。

最新更新