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

HttpClient, Make Action String Type Safe

有没有办法使下面的 '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

创建一个 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
        }
    );
  }

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

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

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)
}