Bruke strengbokstavyper i Typescript


Jeg prøver å bruke en metode (i Angular) som har følgende definisjon:

request(method: string, url: string, options?: {
    body?: any;
    headers?: HttpHeaders;
    params?: HttpParams;
    observe?: HttpObserve;
    reportProgress?: boolean;
    responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
    withCredentials?: boolean;
}): Observable<any>;

Koden min ser slik ut:

let options = {
    headers: headers,
    content: content,
    responseType: 'json'
};

 http.request(method, url, options)

Men jeg får denne feilen:

feil TS2345: Argument av typen '{ headers: HttpHeaders; content: string; responseType: string; }' kan ikke tildeles parameter av typen '{ body?: any; headers?: HttpHeaders; params?: HttpParams; observe?: HttpObserve; reportProgress?:...'. Typene til egenskapen 'responseType' er inkompatible. Type 'string' kan ikke tildeles typen '"text" | "json" | "arraybuffer" | "blob"'.

Siden responseType ikke har en deklarert type som "type ResponseType='arraybuffer' | ...", hvordan kan jeg "kaste" litteralen 'json' for å være en gyldig verdi for denne egenskapen?

Svar #1

Du kan kaste strengen til streng-literaltypen:

let options = {
    headers: headers,
    content: content,
    responseType: 'json' as 'json'
};

Rediger

Siden 3.4 kunne du også legge til as const:

let options = {
    headers: headers,
    content: content,
    responseType: 'json' as const
};

Relaterte artikler