TS1086: метод доступа не может быть объявлен в окружающем контексте


13

У меня тысячи ошибок после первоначальной реализации и ввода в терминале ng serve my-app of, и я не могу их устранить. Это впервые для меня, когда у меня такая проблема внутри angular с машинописными ошибками выглядит так:

ОШИБКА в ../../node_modules/@angular/flex-layout/core/typings/base/base2.d.ts:24:19 - ошибка TS1086: метод доступа не может быть объявлен в окружающем контексте.

24     protected get parentElement(): HTMLElement | null;
                     ~~~~~~~~~~~~~
../../node_modules/@angular/flex-layout/core/typings/base/base2.d.ts:26:19

- ошибка TS1086: метод доступа не может быть объявлен в окружающем контексте.

26     protected get nativeElement(): HTMLElement;
                     ~~~~~~~~~~~~~
../../node_modules/@angular/flex-layout/core/typings/base/base2.d.ts:28:9

- ошибка TS1086: метод доступа не может быть объявлен в окружающем контексте.

28     get activatedValue(): string;
           ~~~~~~~~~~~~~~
../../node_modules/@angular/flex-layout/core/typings/base/base2.d.ts:29:9

- ошибка TS1086: метод доступа не может быть объявлен в окружающем контексте.

29     set activatedValue(value: string);
           ~~~~~~~~~~~~~~
../../node_modules/@angular/flex-layout/core/typings/breakpoints/break-point-registry.d.ts:20:9

- ошибка TS1086: метод доступа не может быть объявлен в окружающем контексте. [...]

Кто-нибудь знает причину? Я не могу проверить свое приложение, пока не исправлю его.

Обновление 1

Хорошо, я делаю это вперед. Большая часть ошибок исчезла, но у меня есть несколько, например, первая из них:

ОШИБКА в src / app / main / main.component.ts: 143: 63 - ошибка TS2322: введите 'string | undefined 'нельзя назначить типу' string '. Тип 'undefined' нельзя назначить типу 'string'.

143 this.fileService.add ({isFolder: true, name: folder.name, родительский: this.currentRoot? This.currentRoot.id: 'root'});

Код выглядит так:

main.component.ts:

currentRoot: MpFileElement = new MpFileElement();
...
    addFolder(folder: { name: string }) {
        this.fileService.add({ isFolder: true, name: folder.name, parent: 
    this.currentRoot ? this.currentRoot.id : 'root' });
        this.updateFileElementQuery();
    }
...

file.service.ts:

import { Injectable } from '@angular/core';

import { v4 } from 'uuid';
import { MpFileElement } from '../models/mp-file-element.model';
import { Observable } from 'rxjs/internal/Observable';
import { BehaviorSubject } from 'rxjs';

export interface IFileService {
    add(fileElement: MpFileElement);
    delete(id: string);
    update(id: string, update: Partial<MpFileElement>);
    queryInFolder(folderId: string): Observable<MpFileElement[]>;
    get(id: string): MpFileElement;
}

@Injectable()
export class MpFileService implements IFileService {

    constructor() {}
    private map = new Map<string, MpFileElement>()

    private querySubject: BehaviorSubject<MpFileElement[]>;

    add(fileElement: MpFileElement) {
        fileElement.id = v4();
        this.map.set(fileElement.id, this.clone(fileElement));
        return fileElement;
    }

    delete(id: string) {
        this.map.delete(id);
    }

    update(id: string, update: Partial<MpFileElement>) {
        let element = this.map.get(id);
        element = Object.assign(element, update);
        this.map.set(element.id, element);
    }
    queryInFolder(folderId: string) {
        const result: MpFileElement[] = [];
        this.map.forEach(element => {
            if (element.parent === folderId) {
                result.push(this.clone(element));
            }
        })
        if (!this.querySubject) {
            this.querySubject = new BehaviorSubject(result);
        } else {
            this.querySubject.next(result);
        }
        return this.querySubject.asObservable();
    }

    get(id: string) {
        return this.map.get(id);
    }

    clone(element: MpFileElement) {
        return JSON.parse(JSON.stringify(element));
    }
}

1
Я хотел бы прочитать это - github.com/microsoft/TypeScript/issues/33939 .
Сэм

@ Сэм, я прочитал это, и ничто не помогает - к сожалению
xavn-mpt

1
Вы используете версию 9.0.0-beta.28@ angular / flex-layout? Я попытался бы вернуться к предыдущей версии, прежде чем они столкнулись с версией TS.
Сэм

@Sam Я изменил в файле package.json более старую версию, и у меня все еще возникла та же проблема после удаления node_modules, package-lock.json и повторной установки.
xavn-mpt

@Sam на данный момент это 8.0.0-beta.27
xavn-mpt

Ответы:


16

У меня была такая же проблема, и эти 2 команды спасли мне жизнь. Моя основная проблема заключается в том, что я всегда путаюсь с глобальной установкой и локальной установкой. Возможно, вы столкнулись с подобной проблемой, и, надеюсь, выполнение этих команд также решит вашу проблему.

ng update --next @angular/cli --force
npm install typescript@latest

Это работало нормально для меня.
это Яша

2
Это работает для меня. но я должен понизить мою версию машинописи до 3.6.x. выше 3.8.0 не работает и выдает ошибку.
Хардик Патель

12

Установка "skipLibCheck": trueв tsconfig.jsonрешил мою проблему

"compilerOptions": {
    "skipLibCheck": true
}

1
Это также сработало для меня, и я думаю, что это нормально для POC или примера проекта, но другой поток обсуждает потенциальные недостатки этого в целом: stackoverflow.com/questions/52311779/…
ewomack

это работа для меня, после многих попыток я наконец запустил свой демо-проект metronic. Спасибо!
JMSamudio

7

У меня возникла такая же проблема при добавлении @ angular / flex-layout в мой проект Angular 8 с помощью

`npm install @angular/flex-layout --save`.

С тех пор эта команда установила основную 9-ю версию пакета flex-layout. Вместо того, чтобы обновлять все остальное до последней версии, я решил ее, установив вместо этого последнюю восьмую основную версию пакета .

 npm install @angular/flex-layout@8.0.0-beta.27 --save

2

Похоже, вы недавно установили пакет flex-layout. Попробуйте удалить эту папку пакета из папки node_modules и переустановить предыдущую версию этого пакета.

Недавно (за 2 дня до текущей даты) angular выпустила последнюю версию angular-cli (v9.0.1), в связи с чем многие пакеты были обновлены для поддержки этой последней версии cli. В вашем случае у вас может быть старая версия cli, и при установке этого пакета он был загружен для последней версии cli по умолчанию. Поэтому попробуйте понизить версию вашего пакета. Работал для меня по крайней мере.

Также не забудьте понизить версию вашего пакета в файле package.json.


2

пытаться

ng update @angular/core @angular/cli

Затем, чтобы синхронизировать материал, запустите:

ng update @angular/material

2

В моем случае работало понижение @ angular / animations, если вы можете себе это позволить, запустите команду

npm i @angular/animations@6.1.10

Или используйте другую версию, которая может работать для вас, на вкладке Версии здесь: https://www.npmjs.com/package/@angular/animations.


2

Быстрое решение: обновите package.json

"devDependencies": {
   ...
   "typescript": "~3.7.4",
 }

В tsconfig.json

{
    ...,
    "angularCompilerOptions": {
       ...,
       "disableTypeScriptVersionCheck": true
    }
}

затем удалите папку node_modules и переустановите с

установка npm

Для большего посещения здесь


0

это краткий ответ, который я надеюсь помочь

Попробуйте понизить Agular и Angular-CLI до v8, я думаю, что ваша проблема - проблема совместимости пакетов


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.