ошибка TS2339: свойство "commonLatest "не существует для типа" typeof Observable "

У меня проблема, когда я пытаюсь запустить свой проект angular 6. У меня такая ошибка:

«TSError: ⨯ Невозможно скомпилировать TypeScript: git.version.ts (34,29): ошибка TS2339: свойство'commonLatest 'не существует для типа' typeof Observable '».

Он хорошо работал с Angular 5, но я обновил RxJs (с 5 до 6), и теперь он не работает.

import { readFileSync, writeFileSync } from 'fs';
import { join } from 'path';
import { Observable, combineLatest } from 'rxjs';


let exec = require('child_process').exec;

let tag = new Observable<string>(s => {
    exec('git describe --tags $(git rev-list --tags --max-count=1)',
        function (error: Error, stdout: Buffer, stderr: Buffer) {
            if (error !== null) {
                console.log('git error: ' + error + stderr);
            }
            s.next(stdout.toString().trim());
            s.complete();
        });
});



let revision = new Observable<string>(s => {
    exec('git rev-parse --short HEAD',
        function (error: Error, stdout: Buffer, stderr: Buffer) {
            if (error !== null) {
                console.log('git error: ' + error + stderr);
            }
            s.next(stdout.toString().trim());
            s.complete();
        });
});

Observable.combineLatest(tag, revision).subscribe(([tag, revision]) => {
        console.log(`version: '${tag}', revision: '${revision}'`);

        const content = '// this file is automatically generated\n' +
            `export const version = {version: '${tag}', revision: '${revision}'};`;

        writeFileSync(
            'src/environments/version.ts',
            content,
            {encoding: 'utf8'}
        );
    });

Я запускаю команду: "ts-node git.version.ts", чтобы получить фиксацию и версию тега, с которой я работаю.

Большое тебе спасибо !

ОБНОВИТЬ :

combineLatest(tag, revision).subscribe(([tag, revision]) => {
        console.log(`version: '${tag}', revision: '${revision}'`);

        const content = '// this file is automatically generated\n' +
            `export const version = {version: '${tag}', revision: '${revision}'};`;

        writeFileSync(
            'src/environments/version.ts',
            content,
            {encoding: 'utf8'}
        );
    });

У меня нет ошибок по поводу CombineLatest, но у меня есть ошибка от ts-node:

function (exports, require, module, __filename, __dirname) { import { writeFileSync } from 'fs';
                                                              ^^^^^^

SyntaxError: Unexpected token import

Любая идея ?

ОБНОВЛЕНИЕ 2: Чтобы исправить эту ошибку:

"config": "ts-node -O '{\"module\": \"commonjs\"}' git.version.ts",

В package.json


person Joe Allen    schedule 21.08.2018    source источник


Ответы (2)


Angular6 поставляется с rxjs6. Это правильный формат для combLatest:

import перед объявлением класса из нового местоположения 'rxjs':

// RxJS v6+
import { timer, combineLatest } from 'rxjs';

пример использования внутри функции:

//timerOne emits first value at 1s, then once every 4s
const timerOne = timer(1000, 4000);
//timerTwo emits first value at 2s, then once every 4s
const timerTwo = timer(2000, 4000);
//timerThree emits first value at 3s, then once every 4s
const timerThree = timer(3000, 4000);

//when one timer emits, emit the latest values from each timer as an array
const combined = combineLatest(timerOne, timerTwo, timerThree);

const subscribe = combined.subscribe(
  ([timerValOne, timerValTwo, timerValThree]) => {
    /*
      Example:
    timerOne first tick: 'Timer One Latest: 1, Timer Two Latest:0, Timer Three Latest: 0
    timerTwo first tick: 'Timer One Latest: 1, Timer Two Latest:1, Timer Three Latest: 0
    timerThree first tick: 'Timer One Latest: 1, Timer Two Latest:1, Timer Three Latest: 1
  */
    console.log(
      `Timer One Latest: ${timerValOne},
     Timer Two Latest: ${timerValTwo},
     Timer Three Latest: ${timerValThree}`
    );
  }
);

Конечно, в вашем случае вы бы заменили таймеры своими tag, revision элементами.

Отрывок из кода:

https://www.learnrxjs.io/operators/combination/combinelatest.html

который содержит больше примеров

person Z. Bagley    schedule 21.08.2018
comment
Я попробовал ваше решение и отредактировал свой первый пост, потому что у меня другая ошибка (по поводу ts-node) - person Joe Allen; 21.08.2018
comment
Наконец-то нашел свою проблему. Я добавляю эту конфигурацию в свой package.json, когда запускаю команду ts-node: config: ts-node -O '{\ module \: \ commonjs \}' git.version.ts, - person Joe Allen; 21.08.2018
comment
@JoeAllen Рад, что ты нашел это, просто набирал для тебя возможные варианты;) - person Z. Bagley; 21.08.2018
comment
Ваше решение чище моего;) - person Joe Allen; 21.08.2018

У меня такая же проблема, я просто

заменил import {Observable} из 'rxjs / Observable'

автор: import {Observable} из 'rxjs / Rx'

person Yousuf    schedule 24.08.2018