TS1086:不能在环境上下文中声明访问器

xav*_*mpt 87 typescript angular

在初始实施后,我在终端 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
Run Code Online (Sandbox Code Playgroud)

- 错误 TS1086:无法在环境上下文中声明访问器。

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

- 错误 TS1086:无法在环境上下文中声明访问器。

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

- 错误 TS1086:无法在环境上下文中声明访问器。

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

- 错误 TS1086:无法在环境上下文中声明访问器。 [...]

有人知道原因吗?在我修复它之前,我无法测试我的应用程序。

更新 1

好的,我继续前进。大多数错误都消失了,但我现在有几个错误,例如第一个:

src/app/main/main.component.ts:143:63 中的错误 - 错误 TS2322:键入 'string | undefined' 不能分配给类型 'string'。类型 'undefined' 不能分配给类型 'string'。

第 143 章

代码如下所示:

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();
    }
...
Run Code Online (Sandbox Code Playgroud)

文件.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));
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 248

设置"skipLibCheck": truetsconfig.json解决我的问题

"compilerOptions": {
    "skipLibCheck": true
}
Run Code Online (Sandbox Code Playgroud)

  • 不要使用此选项。这可能有效,但在许多情况下这不是正确的解决方案。如果您使用的库版本不正确,通常会出现此问题。找出导致此问题的库并使用它的正确版本。 (5认同)
  • 这也对我有用,我认为这对于 POC 或示例项目来说很好,但另一个线程讨论了这样做的一般潜在缺点:/sf/ask/3661824561/ -编译器参数-skiplibcheck (4认同)
  • 最佳答案,对我来说效果很好......拯救我的一天,谢谢 (2认同)

小智 29

我遇到了同样的问题,这 2 个命令挽救了我的生命。我的根本问题是我总是搞砸全局安装和本地安装。也许您正面临类似的问题,希望运行这些命令也能解决您的问题。

ng update --next @angular/cli --force
npm install typescript@latest
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用。但我必须将打字稿版本降级到 3.6.x。3.8.0 以上版本不起作用并抛出错误。 (2认同)

Atl*_*tle 18

现在将@angular/flex-layout 添加到我的 Angular 8 项目时,我遇到了同样的问题

`npm install @angular/flex-layout --save`.
Run Code Online (Sandbox Code Playgroud)

这是因为现在该命令安装了 flex-layout 包的第 9 主要版本。我没有将其他所有内容升级到最后一个版本,而是通过安装该软件包的最新第 8 个主要版本来解决它。

 npm install @angular/flex-layout@8.0.0-beta.27 --save
Run Code Online (Sandbox Code Playgroud)


小智 15

如果只是一个库导致了这种情况,这将很好地避免这个问题。打字稿有时会让人头疼,所以在你的 tsconfig.json 文件中设置这个值。

"compilerOptions": {
    "skipLibCheck": true
}
Run Code Online (Sandbox Code Playgroud)


小智 6

快速解决方案:更新 package.json

"devDependencies": {
   ...
   "typescript": "~3.7.4",
 }
Run Code Online (Sandbox Code Playgroud)

在 tsconfig.json 中

{
    ...,
    "angularCompilerOptions": {
       ...,
       "disableTypeScriptVersionCheck": true
    }
}
Run Code Online (Sandbox Code Playgroud)

然后删除 node_modules 文件夹并重新安装

安装

更多请访问这里


Sun*_*arg 5

就我而言,两个库的版本不匹配

我正在使用Angular 7.0.0并安装

"@swimlane/ngx-dnd": "^8.0.0"
Run Code Online (Sandbox Code Playgroud)

这导致了问题。将此库恢复为

"@swimlane/ngx-dnd": "6.0.0"
Run Code Online (Sandbox Code Playgroud)

为我工作。