2016-12-19 2 views
6

У меня есть следующий пример:Почему машинопись не жалуются на некоторых неопределенных переменных

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

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

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

Для некоторых имен переменных, машинопись (сейчас версии 2.1.4) будет не жалуются, что они не являются определенный в вашей программе (в разговоре метода имя используется без этого.). name - один из тех.

Если переименовать переменную, скажем, firstName, компилятор жалуется по праву ...

ошибка TS2663: Не удается найти имя «Имя». Вы имели в виду экземпляр «this.firstName»?

То же касается, например, окно, которое, по-видимому, предполагается, существует.

Мой вопрос (ы):

  • Какие имена переменных предполагается существование и почему?
  • Можно ли изменить это поведение (например, в некоторых линтерах вы можете указать, какие переменные вы ожидаете получить в глобальном масштабе)?

ответ

3

Причина, по которой он не будет жаловаться на name, заключается в том, что в глобальном пространстве имен есть переменная, называемая именем.
Откройте консоль в инструментах разработчика и напишите name и нажмите клавишу ввода, и вы получите: "".

Другие ресурсы:

Все глобальные переменные могут быть использованы без их определения.

Чтобы удалить все глобальные определения, вы можете, например. в вашем tsconfig.json, установите опцию "libs" в пустой массив. Это удалит все globals.

+0

Знаете ли вы, есть ли способ отключить это? – flq

+0

Выключить что-нибудь? Существует переменная 'name', что бы вы хотели сделать компилятору? –

+0

не обязательно, например. когда вы пишете код для приложения node.js, окна и друзья не будут существовать. В таком случае было бы неплохо, если бы компилятор не предполагал существование этих глобальных переменных. – flq

 Смежные вопросы

  • Нет связанных вопросов^_^