ошибка TS2339: Свойство ‘startWith’ не существует для типа ‘Subject’

#angular

#angular

Вопрос:

Я получаю приведенную ниже ошибку в проекте Angular 7. Я установил typescript с использованием npm, что может означать последнюю версию typescript.

ошибка TS2339: Свойство ‘startWith’ не существует для типа ‘Subject< строка>’.

app.component.ts

 this.language
    .startWith(this.translationService.getBrowserLang())
    .subscribe(lang => this.store.dispatch(new LanguageAction(lang)))
  

tsconfig.json

 {
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "es2015",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  }
}
  

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

Комментарии:

1. вы пытаетесь использовать утилиту для перебора строк w3schools.com/jsref/jsref_startswith.asp Я думаю, вам нужно внести логику в использование pipe

2. learnrxjs.io/operators/combination/startwith.html

3. @Bibin Не могли бы вы, пожалуйста, также добавить код того, как вы объявляете / инициализируете или внедряете this.language ?

Ответ №1:

вы пытаетесь использовать неправильным образом. вы также должны использовать pipe для subject.

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

Также, когда вы используете subject, это больше не строка. и вы пытаетесь использовать утилиту string.

Ответ №2:

Как уже сказал @The Mechanic, вы пытаетесь использовать startWith метод непосредственно на Subject . Начиная с версии 5.5, операторы являются конвейерными. Если вы хотите отфильтровать правильные значения, используйте это вместо:

 this.language.pipe(
  startWith(this.translationService.getBrowserLang())
).subscribe(lang => this.store.dispatch(new LanguageAction(lang)));