Nano Hash - криптовалюты, майнинг, программирование

Свойство "json" не существует для типа "{}"

У меня есть абстрактный базовый класс в Typescript, который выглядит так:

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

Это работает отлично. Однако компилятор Typescript жалуется на .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, и это работает . Мне просто надоело смотреть на эту ошибку. Я что-то упускаю?

25.11.2015

  • Мне кажется, что ответ, который вы уже получили, представляет собой данные json, поэтому вызов json() излишен. И это имело бы смысл, поскольку вы указываете заголовок accept, а в примере ссылки нет. 25.11.2015
  • @Гимби, а-а. Вы, вероятно, правы, я, вероятно, могу вообще отказаться от этой строки. Но... компилятор этого не знает, верно? Разве Typescript не должен позволять мне это делать, поскольку он не знает, как будут выглядеть возвращаемые данные? 25.11.2015
  • Честно говоря, я сам пропустил тег машинописного текста, я мало что знаю об этом :) 25.11.2015
  • Используйте 1_ 25.11.2015

Ответы:


1

Для меня это выглядит странно...

.map(res => (<Response>res).json())

я бы сделал

.map((res: Response) => res.json())
21.06.2017
  • Прошло некоторое время с тех пор, как я написал этот вопрос. Я определенно предпочитаю это и сейчас. 21.06.2017
  • теперь, поскольку класс Response устарел, не могли бы вы написать этот ответ также в контексте класса HttpResponse. Простая замена не поможет, так что пожалуйста! 27.11.2017
  • Response - это просто интерфейс... вы можете создать свой собственный интерфейс MyCustomThing и использовать его... вы все равно будете использовать его таким же образом. Но имейте в виду, что .json() не нужен, если вы используете более новый HttpClient вместо Http. 27.11.2017
  • Я имею в виду комментарий @Mackelito, который полезен для более новых версий Angular: .json() не требуется, когда вы используете HttpClient вместо Http. 23.08.2019

  • 2

    Вы можете избавиться от этой ошибки, указав тип на Response:

    .map((res: Response) => res.json())
    

    http.post() вернет Observable<Response>, для которого map потребуется объект типа Response. Я думаю, что это отсутствующее определение в текущем TypeScript AngularJS .d.ts.

    25.11.2015
  • Это может быть просто пластырь, но по крайней мере ошибка исчезла. Благодарю вас! 25.11.2015
  • TypeScript считает, что res имеет тип пустой объект. Какой тип должен быть? 25.11.2015
  • наблюдаемый - упоминается здесь 25.11.2015
  • Если это Response, вы можете преобразовать его в <Response> вместо <any>. Проблема в том, что TypeScript не может автоматически предположить, что res равен Response, потому что контекст в map недостаточно специфичен. 25.11.2015
  • Итак, странно... Я действительно думал, что у вас есть это с Observable<Response> (похоже, это было бы более точным, основываясь на документах), но на самом деле мне нужно было просто Response. Если вы обновите свой ответ, я отмечу его как принятый. 25.11.2015
  • ОК, я также добавил дополнительную информацию о том, почему вы столкнулись с этой проблемой. 25.11.2015
  • У меня есть другая идея: может быть, вы что-то упустили на import - попробуйте import * from 'angular2/http'; 25.11.2015
  • предпочитаю синтаксис as для утверждения ... также не называйте это приведением basarat.gitbooks.io/typescript/content/docs/types/. Тем не менее +1 ???? 26.11.2015
  • Так что .map(res as Response => res).json()) будет работать? Извините, что назвал это кастингом 26.11.2015
  • на самом деле этот ответ помог мне stackoverflow.com/a/37725361/942317 17.04.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..


    © 2024 nano-hash.ru, Nano Hash - криптовалюты, майнинг, программирование