2016-12-19 19 views
6

Tôi có ví dụ sau:Tại sao nguyên cảo không phàn nàn về biến không xác định chắc chắn

class Uncle { 
    constructor(public name : string) { } 

    talk() { 
    return "Hello my name is " + name; 
    } 
} 

let p : Uncle = new Uncle("Jo"); 
console.log(p.talk()); 

Đối với tên biến nhất định, nguyên cảo (ngay bây giờ Version 2.1.4) sẽ không phàn nàn rằng họ không được định nghĩa trong chương trình của bạn (Trong phần thảo luận về phương thức, tên đang được sử dụng mà không có điều này). name là một trong số đó.

Nếu tôi đổi tên biến, chẳng hạn, firstName, trình biên dịch phàn nàn chính đáng ...

lỗi TS2663: Không thể tìm thấy tên 'firstname'. Ý bạn là thành viên cá thể 'this.firstName'?

Tương tự, ví dụ: cửa sổ, dường như được cho là tồn tại.

Câu hỏi của tôi (s) là:

  • Những tên biến được cho là tồn tại và tại sao?
  • Hành vi đó có thể được thay đổi không (ví dụ: trong một số trường hợp bạn có thể nêu rõ các biến mà bạn mong muốn có sẵn trên toàn cầu)?

Trả lời

3

Lý do không khiếu nại về name là có một biến được gọi là tên trong không gian tên chung.
Mở bảng điều khiển trong công cụ nhà phát triển và viết name và nhấn enter và bạn sẽ nhận được: "".

Tài nguyên khác:

Tất cả các biến toàn cục có thể được sử dụng mà không định nghĩa chúng.

Để xóa tất cả các định nghĩa toàn cầu, bạn có thể, ví dụ: trong số tsconfig.json, đặt tùy chọn "libs" thành một mảng trống. Thao tác này sẽ xóa tất cả các hình ảnh toàn cầu.

+0

Bạn có biết liệu có cách tắt tính năng này không? – flq

+0

Tắt nội dung nào? Biến 'name' tồn tại, bạn muốn trình biên dịch làm gì? –

+0

không nhất thiết phải ví dụ: khi bạn viết mã cho một ứng dụng node.js, cửa sổ và bạn bè sẽ không tồn tại. Trong trường hợp như vậy nó sẽ được tốt đẹp nếu trình biên dịch sẽ không giả định sự tồn tại của những globals. – flq

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