ошибка TS2339: свойство catch не существует для типа PromiseLike ‹void›

Я использую WebRTC в Angular 2.

В TypeScript 1.x я могу успешно использовать это.

   navigator.mediaDevices.getUserMedia(constraints)
      .then(myStream => {
        this.myStream = myStream;
      })
      .catch(error => {
        console.log(error);
      });

Но после обновления до TypeScript 2.x я получил эту ошибку в моем терминале при запуске npm run watch:

ошибка TS2339: свойство «catch» не существует для типа «PromiseLike».

Мой магазин IDE WebStore тоже показывает красный цвет:

введите описание изображения здесь

Я уже сделал npm install --save-dev @types/webrtc.

Мой файл tsconfig.json:

{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "module": "commonjs",
    "removeComments": true,
    "sourceMap": true,
    "lib": ["es6", "dom"],
    "types": [
      "body-parser",
      "compression",
      "express",
      "express-session",
      "mime",
      "node",
      "serve-static",
      "webrtc",
      "ws"
    ]
  },
  "include": [
    "node_modules/@types/**/*.d.ts",
    "src/**/*.ts"
  ],
  "exclude": [
    "node_modules",
    "!node_modules/@types/**/*.d.ts"
  ],
  "compileOnSave": false,
  "buildOnSave": false,
  "atom": {
    "rewriteTsconfig": false
  }
}

Я использую универсальный стартер как начало, поэтому мой nodemon.json и package.json совпадают с ними, только пакетов больше.

Как мне избавиться от этой ошибки?


person Hongbo Miao    schedule 12.08.2016    source источник
comment
Что возвращает getUserMedia?   -  person    schedule 12.08.2016
comment
@torazaburo возвращает Promise<MediaStream>   -  person Hongbo Miao    schedule 12.08.2016
comment
@HongboMiao Пожалуйста, опубликуйте полное сообщение об ошибке (со стеком вызовов). Я не могу воспроизвести эту ошибку, если запустил ваш пример. getUserMedia.then возвращает Promise, а не PromiseLike в моей настройке. Таким образом, я не получаю сообщения об ошибке. Появляется ли эта ошибка в другом месте вашего реального кода или вы получаете эту ошибку именно с этим кодом?   -  person maiermic    schedule 13.08.2016
comment
@HongboMiao Пожалуйста, опубликуйте свой tsconfig.json.   -  person maiermic    schedule 13.08.2016


Ответы (1)


Встроенная библиотека dom объявляет проблему, вызывающую определение (см. lib.dom.d.ts):

getUserMedia(constraints: MediaStreamConstraints): PromiseLike<MediaStream>;

тогда как @types/webrtc объявляет ваше ожидаемое определение (см. MediaStream.d .ts):

getUserMedia(constraints: MediaStreamConstraints): Promise<MediaStream>;

В репозитории TypeScript есть открытая проблема.

person maiermic    schedule 12.08.2016
comment
О, я был счастлив слишком рано. после изменения на "lib": ["es6", "dom", "es2015.promise"], все еще показывает ту же ошибку в терминале, когда я запускаю npm run watch - person Hongbo Miao; 13.08.2016
comment
"es6" включает "es2015.promise". Таким образом, вам не нужно "es2015.promise" - person maiermic; 13.08.2016
comment
Как выглядит ваш watch скрипт в package.json? - person maiermic; 13.08.2016
comment
Я добавил больше деталей в свой вопрос. Поскольку я использую универсальный стартер, сценарий watch похож на эта строка. (Обратите внимание, что моя IDE WebStorm также показывает красный цвет для catch) - person Hongbo Miao; 13.08.2016
comment
Теперь я предполагаю, что это ошибка @ types / webrtc, потому что, когда я использую обещание с catch для других, таких как мангуст, это не даст мне никаких ошибок. - person Hongbo Miao; 13.08.2016
comment
Это вызвано библиотекой dom TypeScript (см. Мой обновленный ответ). - person maiermic; 13.08.2016