如何修复'属性不存在类型'错误?

时间:2018-04-17 17:54:16

标签: angular typescript

我正在关注this video tutorialtext version of the same)。我遵循完全相同的代码,我收到此错误:

  

错误TS2339:财产' getEmployees'在类型上不存在   '的EmployeeService'

我查看了互联网并访问了很多关于Stack Overflow的问题,例如thisthisthisthis,以及与此错误相关的许多其他问题在GitHub。

服务

//import statements go here ...

@Injectable()
export class EmployeeService {
private listEmployees: Employee[] = [
    {
      //just to avoid longer code, deleted dummy data.
    },
  ];

  getEmployees(): Employee[] {
      return this.listEmployees; //ERROR in src/app/employees/list-employees.component.ts(14,44)
  }
}

组件类:

//import statements
@Component({
    selector: 'app-list-employees',
    templateUrl: './list-employees.component.html',
    styleUrls: ['./list-employees.component.css']
})
export class ListEmployeesComponent implements OnInit {
    employees: Employee[];
    constructor(private _EmployeeService: EmployeeService) { }

    ngOnInit() {
        this.employees = this._EmployeeService.getEmployees();
    }

}

我已在app.module.ts中导入了服务,并将其添加到ngModule的提供者数组中。

我无法解决错误,也无法理解造成此错误的原因。

6 个答案:

答案 0 :(得分:9)

通常在开发Angular应用程序时会发生。要解决这个问题,只需关闭服务器即可。再次启动它:

$ ng serve 

这是因为当您启动服务器时,您的应用程序实际上是存储在存储中的捆绑包的总和。当您对代码进行更改时,有时更改不会占用您的存储空间,这将导致服务器仍在使用旧的捆绑包。

答案 1 :(得分:2)

如果上述所有内容均已检查,请检查

constructor(private _employeeService: EmployeeService) { }

私有,访问说明符在那里。如果缺少访问说明符,则会发生相同的问题。

答案 2 :(得分:0)

如果您想避免编译警告,那么肮脏的修补程序将是

header.js

任何实例都允许任何方法调用该对象上的任何方法。这样可以避免编译警告,但它不是运行时安全的。

使用前,请务必小心。如果您确定该方法将在运行时可用,则仅使用它。

答案 3 :(得分:0)

我也将订阅服务方法,而不是将其保存到ngOnInit()中的另一个值:

ngOnInit() {
    this.employees = this._EmployeeService.getEmployees();
}

类似:

ngOnInit(){
   this.getEmployees()
}

private getEmployees(): void {
    this._EmployeeService.getEmployees()
        .subscribe(fetchedEmployees = > this.employees = fetchedEmployees)
}

答案 4 :(得分:0)

如果您使用命令 ng servecommand 并构建成功。

然后,使用命令 ng build --prod failed ,并且智能感知是正确的。

您可能在使用源代码时遇到问题。

对于enviroment config,不同的configuration会使用不同的文件,都在angular.json中。

By default ,environment.ts 将替换为 environment.prod.ts

"configurations": {
  "production": {
    "fileReplacements": [
      {
        "replace": "src/environments/environment.ts",
        "with": "src/environments/environment.prod.ts"
      }
    ],
    ...

因此,根据您的配置,您必须将 className.prod.ts 修改为 className.ts

答案 5 :(得分:-1)

在方法声明中使用静态关键字:

 public static getEmployees(): any []{

}