Typescript предоставляет парадигмы объектно-ориентированного и общего программирования помимо функционального программирования, предлагаемого Javascript.
Нет, сам JavaScript предлагает объектно-ориентированную и универсальную модель программирования и может использоваться вфункциональный стиль программирования (но не предназначен специально для его поддержки, как Haskell).
Все, что делает TypeScript, это:
- Добавление статической проверки типов (это ее основная цель).
- Поддержка раннего принятия некоторых предлагаемых будущих функций JavaScript через компилятор TypeScript (например: компилятор TypeScript очень рано поддерживал синтаксис
class
). - Добавьте дополнительный синтаксис для конструкторов, которыйвряд ли когда-нибудь станет функцией JavaScript: автоматическое копирование параметров в свойства.
- Добавление «частных» свойств через ключевое слово
private
;У JavaScript скоро появятся личные свойства, но он не будет использовать синтаксис, который использует TypeScript.
Все остальное - это JavaScript.
Когда я говорю «все», это не умаляет этих вещей,В частности, статическая проверка типов может быть чрезвычайно полезна, особенно в крупных проектах.
Ключевое слово prototype
является очень мощным, а иногда и опасным инструментом.В общем, я читал, что он имитирует аспект наследования в Javascript.
prototype
- это не ключевое слово, это просто имя свойства в функциях конструктора, которое ссылается на объект, который будетназначается в качестве прототипа объекта, созданного с помощью ключевого слова new
, используемого с этими конструкторами.
Наследование не имитируется в JavaScript.Это реализовано с прототипами, см. прототип наследования .
Итак, какой предпочтительно [ближайший] вариант prototype
в .ts?
Это будет: prototype
, прямо или косвенно через class
.Опять же, TypeScript просто добавляет слой статической проверки типов и несколько небольших синтаксических дополнений.Все остальное - просто JavaScript.
Предположим, если ответ - наследование, то как extend
из implement
String-интерфейсы JS в TS [так как может быть много абстрактных методов]?
Не очень понятно, о чем вы здесь спрашиваете.Вы можете расширить строку:
class MyString extends String {
// ...
}
... или добавить к String.prototype
, в идеале добавляя неперечислимые свойства с функциями, назначенными им через Object.defineProperty
:
Object.defineProperty(String.prototype, "myAddition", {/*...*/});