2014-11-12 3 views
1

В названии говорится, что все действительно.Собственные свойства и методы входят в файл определения TypeScript?

Я создаю новый файл d.ts для пользовательского проекта в JavaScript. В других проектах, где я использовал файл определения сторонних разработчиков. Там была смесь. Некоторые люди включают частные свойства и методы класса, а другие - нет.

Есть ли правильный путь? Я бы предположил, что намерение частных элементов состоит в том, чтобы они оставались таковыми. Но технически говоря, кто-то может переопределить права частного элемента (в JS)? У меня также есть опасения, что, игнорируя их, я оставляю открытое отверстие. Например, если класс имеет частный метод update(), который не определен, то я расширяю этот класс и записываю метод update(). Я чувствую, что здесь есть конфликт.

Буду признателен за любые советы.

ответ

1

Это зависит от реализации JavaScript, я бы не стал подвергать частным членам, которые не находятся на прототипе.

Скажем, у нас есть следующий JavaScript:

var Example = (function() { 
    var update = function() { 
     alert('Private'); 
    } 

    function Example() { 
    } 

    Example.prototype.doIt = function() { 
     update(); 
    }; 
    return Example; 
})(); 

Если я объявляю это так:

declare class Example { 
    update(): void; // private 
    doIt(): void; 
} 

Похоже, я мог бы назвать super.update() из класса к югу, но это потерпит неудачу, потому что update Функция супер класса не входит в объем.

В этом случае я оставил бы его вне декларации, чтобы предотвратить этот класс ошибок (который возникнет во время выполнения).

declare class Example { 
    doIt(): void; 
} 

Если функция update была добавлена ​​к прототипу, вы должны добавить его к определению (спасибо Райан за оправдание этого).

+2

Причина, по которой всегда включать частных членов (из прототипа) в классы, заключается в том, что подклассы знают, что они не определяют членов с тем же именем (и тем самым полностью разбивают класс по непонятным причинам). –

+1

Отличный материал @ RyanCavanaugh - обновлен, чтобы отразить это. – Fenton

+0

Спасибо большое, ребята. Я ценю тщательный совет. – Clark

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