我在第二行感到困惑。这段代码正在工作,但我需要理解它的实际含义。
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));
}
这就是TypeScript的明确赋值断言(!
)。
来自TypeScript文档:
明确的赋值断言是一个特性,它允许将!放在实例属性和变量声明之后,以向TypeScript传递一个变量确实是为所有意图和目的而赋值的,即使TypeScript的分析无法检测到。
因此,它基本上是一种告诉TypeScript停止抱怨员工
立即未定义
的方法,因为他们最终肯定会在您的代码中初始化。
这取决于你的问题指向什么。
employees!: EmployeeClass[];
感叹号告诉编译器变量在运行时不会为空或未定义。所以没有必要从编译器方面抱怨它。
整行代码说有一个变量员工
类型为员工类数组
,它目前没有实例化,但将在运行时。
你可以做到的
employees: EmployeeClass[] = [];
通过这种方式,您总是从Array of员工类
类型的空数组开始,并且您不一定需要感叹号,因为它是实例化的,编译器不会报告缺少的初始化程序。