Что является альтернативным эквивалентом Javascript «прототипа» в Typescript? - PullRequest
0 голосов
/ 13 июня 2018

Typescript предоставляет парадигмы объектно-ориентированного и общего программирования помимо функционального программирования, предлагаемого Javascript.

Ключевое слово prototype является очень мощным, а иногда и опасным инструментом.В общем, я читал, что он имитирует аспект наследования в Javascript.

Так что предпочтительно, какова [ближайшая] альтернатива prototype в .ts?

1 Ответ

0 голосов
/ 13 июня 2018

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", {/*...*/});
...