#javascript #angular #typescript
Вопрос:
У меня есть служебный файл, который должен загружаться cases
из базы данных firebase.
кейсы.сервис.ts
import { Injectable } from '@angular/core';
import { AngularFireDatabase, AngularFireList } from "@angular/fire/database";
import { Observable, Subject, Subscription, timer } from 'rxjs';
import { tap, map } from 'rxjs/operators';
import { Case } from '../models/case.model';
@Injectable({
providedIn: 'root'
})
export class CasesService {
constructor(private db: AngularFireDatabase) { }
getUserCases(uid: string) {
//@ts-ignore
let initialPayload = this.db.list(`/cases/${uid}`).snapshotChanges().pipe(map(actions => actions.map(a => ({ key: a.payload.key, ...a.payload.val() }) ))) as Observable<any[]>;
return initialPayload;
}
// @ts-ignore
createCase(case :Case) {
//@ts-ignore
let caseRef = this.db.database.ref(`/cases/${case.medicUid}`).push();
//@ts-ignore
let caseKey = caseRef.getKey();
case.uid = casesKey;
return caseRef.update(case);
}
}
случаи.компонент.ts
import { Component, OnInit } from '@angular/core';
import { AuthService } from '../shared/services/auth.service';
import { CasesService } from '../shared/services/cases.service';
import { Case } from '../shared/models/case.model';
@Component({
selector: 'app-cases',
templateUrl: './cases.component.html',
styleUrls: ['./cases.component.css']
})
export class CasesComponent implements OnInit {
get userData() {
return this.authService.userData;
}
get userExtras() {
return this.authService.userExtras;
}
casesLoaded = false;
//@ts-ignore
cases: Case[];
case: Case = { uid: '', name: '', details: '', date: '', filesUrls: [], medicUid: '', medicFname: '', medicLname: '' };
constructor(
private casesService: CasesService,
public authService: AuthService
) {}
ngOnInit(): void {
this.getUserCases(this.userData.uid);
}
getUserCases = (uid: string) => {
this.casesService.getUserCases(uid).subscribe((res) => {
this.cases = res;
this.casesLoaded = true;
});
}
//@ts-ignore
createCase(case: Case){
//@ts-ignore
this.casesService.createCase(case).then(res => {
console.log('success creating the case')
//@ts-ignore
}).catch(error => {
console.log(error);
})
}
}
Я получаю странные ошибки в createCase
методе как в компоненте, так и в файле службы. Вот несколько скриншотов:
createCase
ошибки в компоненте:
- (…) неявно имеет
any
тип возврата (этот может быть решен с помощью //@ts-игнорировать, но остальные не могут) https://imgur.com/YhPfMsv - Ожидаемое объявление параметра https://imgur.com/yOC3cpC
- Ожидаемый ‘=’ для инициализатора свойства https://imgur.com/wjELqRx
- Ожидаемое выражение аргумента https://imgur.com/lZznbPr
Те же ошибки появляются для createCase
метода внутри служебного файла.
Обратите внимание, что для getUserCases
метода не появляется никаких ошибок.
Ранее я выполнял проект, в котором использовал точно такую же настройку, и там у меня не было ошибок. Может возникнуть проблема с пакетом, поэтому будет включен мой пакет.json:
пакет.json
{
//...
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"watch": "ng build --watch --configuration development",
"test": "ng test"
},
"private": true,
"dependencies": {
"@angular/animations": "~12.0.3",
"@angular/cdk": "^12.2.10",
"@angular/common": "~12.0.3",
"@angular/compiler": "~12.0.3",
"@angular/core": "~12.0.3",
"@angular/fire": "^6.1.5",
"@angular/forms": "~12.0.3",
"@angular/platform-browser": "~12.0.3",
"@angular/platform-browser-dynamic": "~12.0.3",
"@angular/router": "~12.0.3",
"firebase": "^8.6.7",
"primeflex": "^2.0.0",
"primeicons": "^4.1.0",
"primeng": "^12.2.1",
"rxjs": "~6.6.0",
"tslib": "^2.1.0",
"zone.js": "~0.11.4"
},
"devDependencies": {
"@angular-devkit/build-angular": "~12.0.3",
"@angular/cli": "^12.1.3",
"@angular/compiler-cli": "~12.0.3",
"@types/jasmine": "~3.6.0",
"@types/jest": "^26.0.23",
"@types/mocha": "^8.2.2",
"@types/node": "^12.20.15",
"jasmine-core": "~3.7.0",
"karma": "~6.3.0",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage": "~2.0.3",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.5.0",
"typescript": "~4.2.3",
"@angular-devkit/architect": ">= 0.900 < 0.1300",
"firebase-tools": "^8.0.0 || ^9.0.0",
"fuzzy": "^0.1.3",
"inquirer": "^6.2.2",
"inquirer-autocomplete-prompt": "^1.0.1",
"open": "^7.0.3",
"jsonc-parser": "^3.0.0"
}
}
Комментарии:
1. Измените getUserCases = (uid: строка) => на getUserCases (uid: строка): void =>> и добавьте : void к другим функциям, которые ничего не возвращают. Следует хотя бы избавиться от некоторых ошибок..
Ответ №1:
Я не могу поверить, что это так, но проблема в том, что это case
слово зарезервировано в javascript. Я не могу использовать его для обычного именования переменных, он ожидает определенных действий.
Изменил имя переменной, все работает гладко.