2017-02-15 27 views
5

Tôi có tuyên bố sau:phân Destructuring trong nguyên cảo cho các biến toàn cầu

Tôi nhận được một object từ đâu đó như sau trong ví dụ:

paginationConfig = { 
    'currentPage': 1, 
    'pageSizes': [5, 10, 15], 
    'perPage': 20 
}; 

lớp của tôi:

export class MyComponent implements OnInit { 

    currentPage: number; 
    pageSizes: number[]; 
    perPage: number; 

    constructor() { } 

    ngOnInit(): void { 
    { this.currentPage, this.perPage, this.pageSizes } = paginationConfig; 
    // It prints undefined for all those variables and I receive the error: 
    // TS1128: Declaration or statement expected. 

    // It works for local variables (as below), why not when I use **this**? 
    const { currentPage, perPage, pageSizes } = paginationConfig; 
    } 
} 

Vì vậy, những gì tôi đang cố gắng làm là hủy cấu trúc các object như các ví dụ trong this cuốn sách.

Tôi có thể làm cho nó hoạt động nếu tôi sử dụng các biến số địa phương, nhưng trong trường hợp của tôi, tôi thực sự muốn chúng là toàn cầu. Không phải là nó có thể/hỗ trợ?

PS: Tôi đã cố gắng bọc mọi thứ trong dấu ngoặc đơn, nó cũng không hoạt động.

Trả lời

3

Sử dụng Object.assign từ bên trong lớp học của bạn:

Object.assign(this, paginationConfig); 
+0

Cảm ơn phản hồi của bạn. Nó thực sự hoạt động :) Bạn có thể giải thích tại sao destructuring không hoạt động cho các biến * global *? –

+0

+1 - Vâng, điều này có vẻ như giải pháp hiện tại. Tôi đã thực hiện một số nghiên cứu và sử dụng 'Object.assign' được đề xuất trong GitHub [issue # 5326] (https://github.com/Microsoft/TypeScript/issues/5326). Vấn đề vẫn còn mở và giải pháp TS được đề xuất là 'constructor (công khai {name1, name2})', nhưng vẫn chưa được triển khai. –

+0

Cảm ơn @JoshCrozier vì đã liên kết. –

Các vấn đề liên quan