提问者:小点点

这段代码正在工作,但我需要了解它在Angular 11中的实际含义[重复]


我在第二行感到困惑。这段代码正在工作,但我需要理解它的实际含义。

export class EmployeeService {
  employees!: EmployeeClass[];  // I think it should be *employees: EmployeeClass[] = [];*
  constructor(private http: HttpClient) {}

  getAll(): Observable < EmployeeClass[] > {
    return this.http.get('http://localhost/website/employees_ng').pipe(
      map((res: any) => {
        this.employees = res['data'];
        return this.employees;
      }),
      catchError(this.handleError));
  }

共2个答案

匿名用户

这就是TypeScript的明确赋值断言()。

来自TypeScript文档:

明确的赋值断言是一个特性,它允许将!放在实例属性和变量声明之后,以向TypeScript传递一个变量确实是为所有意图和目的而赋值的,即使TypeScript的分析无法检测到。

因此,它基本上是一种告诉TypeScript停止抱怨员工立即未定义的方法,因为他们最终肯定会在您的代码中初始化。

匿名用户

这取决于你的问题指向什么。

employees!: EmployeeClass[];

感叹号告诉编译器变量在运行时不会为空或未定义。所以没有必要从编译器方面抱怨它。

整行代码说有一个变量员工类型为员工类数组,它目前没有实例化,但将在运行时。

你可以做到的

employees: EmployeeClass[] = [];

通过这种方式,您总是从Array of员工类类型的空数组开始,并且您不一定需要感叹号,因为它是实例化的,编译器不会报告缺少的初始化程序。