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