是否有任何方法可以使下面的"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
}
);
}
要明白,这并不能阻止开发人员键入他们想要的任何字符串。但它确实为您提供了一种类型安全的方式,确保您的字符串在团队中作为标准使用时通过应用程序保持一致。