Доступ к Angular 2 через строковые литералы запрещен

Я новичок в AngularJS 2 и впервые пытаюсь скомпилировать его с помощью TSlint. Я изучил учебник Tour of Heroes, и там есть часть, подобная приведенной ниже, которая TSlint не хочет компилировать, говоря object access via string literals is disallowed.

ngOnInit(): void {
    this.route.params.forEach((params: Params) => {
      let id = +params['id'];
      this.projectService.getProject(id)
        .then(project => this.project = project);
    });
  }

Я не уверен, что понимаю проблему, и я теряюсь, если дело доходит до ее решения. Не могли бы вы мне помочь, пожалуйста?

Другие мои коды

    getProjects(): Promise<Project[]> {
      return this.http.get(`${this.configuration.Server}projects${this.configuration.ApiUrl}`)
                    .toPromise()
                    .then(response => response.json())
                    .catch(this.handleError);
  }

    getProject(ident: number): Promise<Project> {
      return this.getProjects()
             .then(projects => projects.find(project => project.id === id));
    }

person Leukonoe    schedule 08.10.2016    source источник
comment
Проблема не здесь. Покажите свой метод getProject.   -  person micronyks    schedule 08.10.2016
comment
Пробовали изменить params['id'] на params.id? Кроме того, вы можете перенастроить параметры TSLint.   -  person qqilihq    schedule 08.10.2016
comment
да, не существует   -  person Leukonoe    schedule 08.10.2016


Ответы (2)


Я бы просто избавился от этого правила. Доступ к свойству по строке иногда необходим. Если вы посмотрите в свой файл tslint.json, вы увидите свойство "no-string-literal". Просто измените это на false.

Если вы хотите сохранить правило, то для этого конкретного случая вы можете просто ввести params, чтобы получить id. Вы можете сделать это, потому что Params тип просто {[key: string]: any}

route.params.subscribe((params: {id: string}) =>{
  let id = +params.id;
})
person Paul Samsotha    schedule 08.10.2016

Это можно исправить, назначив строковый литерал переменной. И используйте его внутри []. обратитесь к этому ссылка, у него есть несколько вариантов решения этой проблемы.

person Devendiran Kumar    schedule 08.10.2016
comment
совсем не помогает - person Leukonoe; 08.10.2016