Angular TypeScript - (!) Definte assignment assertion và declare modifier

Angular TypeScript - (!) Definte assignment assertion và declare modifier

 Khi bạn compile đoạn code dưới đây trong Angular Typescript bạn sẽ gọi lỗi:

class Person {
    name: string; // Error: Property 'name' has no initializer and is not definitely assigned in the constructor.
}

Có 4 cách để xử lý cho vấn đề này:

Cách 1: Khai báo và khởi tạo ngay giá trị cho nó:

class Person {
    name: string = '';
}

Cách 2: Khởi tạo giá trị cho nó trong hàm contructor:

class Person {
    name: string = '';

   constructor(private el: ElementRef) { 
     this.addClass = '';
   }
}

Cách 3: Sử dụng definite assignment assertion (!) - Tạm dịch: Xác nhận chuyển nhượng xác định:

class Person {
    name!: string;
}

Điều này nói với trình biên dịch (compiler) rằng:

"There is a property called name with a type of string | undefined. It starts with a value of undefined. But every time I get or set that property, I want to treat it as type string."

Nó nói rằng, biến name ban đầu sẽ không được xác định (nó nhận giá trị undefined) nhưng nó vẫn được coi là một string. Nghĩa là nó phải được đặt ở đâu đó trong file, có lẽ không phải trong hàm contructor.

Tuy nhiên cách này không an toàn vì bạn coi một giá trị chưa khởi tạo là một string, điều này có thể crash ứng dụng.

Cách 4: Ambient declaration - declare keyword:

class Person {
    declare name: string;
}

Điều này nói với trình biên dịch (compiler) rằng:

"There is a property called name of type string. I shouldn't have to prove to you that name actually exists, but I want to use it anyway." - Có 1 thuộc tính name với kiểu string. Tôi không cần phải chứng minh với bạn rằng nó thật sự tồn tại nhưng tôi muốn sử dụng nó.

Từ khóa declare thường được sử dụng trong các file định nghĩa type cung cấp các type cho các file mà Typecript không thể lấy thông tin type từ đó (chẳng hạn như các file JS thuần túy).

Cách này cũng không an toàn vì nó có thể gây crash ứng dụng.

Reference

Đăng nhận xét

Mới hơn Cũ hơn