angular - ویژگی 'json' در نوع '{}' وجود ندارد
من یک کلاس پایه انتزاعی در تایپاسکریپت دارم که شبیه این است:
import {Http, Headers, Response} from 'angular2/http';
export abstract class SomeService {
constructor(private http:Http) {}
protected post(path:string, data:Object) {
let stringifiedData = JSON.stringify(data);
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
this.http.post(`http://api.example.com/${path}`, stringifiedData, { headers })
.map(res => res.json())
.subscribe(obj => console.log(obj));
}
}
این بهطور کامل کار میکند. با این حال، کامپایلر تایپاسکریپت درباره .map(res => res.json()) هشدار میدهد. من همچنان این خطا را دریافت میکنم:
ERROR in ./src/app/components/shared/something/some.abstract.service.ts
(13,29): error TS2339: Property 'json' does not exist on type '{}'.
من از مثالهای موجود در مستندات Angular 2 پیروی کردم و این کار میکند. من فقط از نگاه کردن به این خطا خسته شدهام. آیا چیزی را از دست دادهام؟
پاسخ شماره ۱
برای من این عجیب به نظر میرسد...
.map(res => (<Response>res).json())
من انجام میدهم
.map((res: Response) => res.json())
پاسخ شماره ۲
شما میتوانید با استفاده از تایپ-اسرت به Response، از این خطا خلاص شوید:
.map((res: Response) => res.json())
http.post() یک Observable<Response> بازمیگرداند که روی آن map به یک شیء از نوع Response نیاز دارد. فکر میکنم این یک تعریف گمشده در .d.ts فعلی AngularJS TypeScript است.
