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


13

在初始实现中,在终端ng中键入my server的my-app后,我遇到了数千个此类错误,但我无法解决。这是我的第一次,是因为我在打字稿中遇到这样的问题,例如:

../../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 | 未定义”不能分配给“字符串”类型。类型“未定义”不能分配给类型“字符串”。

第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();
    }
...

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));
    }
}


@山姆,我读了这篇文章,没有任何帮助-不幸的是
xavn-mpt

1
您使用的9.0.0-beta.28是@ angular / flex-layout版本吗?我会尝试回滚到以前的版本,然后再破坏TS版本。
山姆

@Sam我在删除node_modules,package-lock.json并重新安装所有内容后,将package.json更改为较旧的版本,并且stil也存在相同的问题。
xavn-mpt

@Sam此时此刻8.0.0-beta.27
xavn-mpt

Answers:


16

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

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

这对我来说很好。
这是yash

2
这对我有用。但是我必须将打字稿版本降级到3.6.x。3.8.0以上版本无法正常工作并引发错误。
Hardik Patel

10

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

"compilerOptions": {
    "skipLibCheck": true
}

1
这也为我工作,我认为它的优良的POC或示例项目,但另一个线程从总体上讨论这样做的潜在的不利因素:stackoverflow.com/questions/52311779/...
ewomack

经过多次尝试,我终于开始了我的机电一体化演示项目。谢谢!
JMSamudio

7

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

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

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

 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

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

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

在tsconfig.json中

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

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

npm安装

欲了解更多信息,请点击这里


0

这是一个简短的答案,希望对您有所帮助

尝试将Agular和Angular-CLI降级到v8,我认为您的问题是软件包兼容性问题


0

我认为您的问题是由打字稿和模块版本不匹配引起的。这个问题与您的问题非常相似,答案令人非常满意。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.