Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.05.2016, 15:37
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Настройка компиляции TypeScript
Вопрос к знатокам TypeScript:

1. Можно ли настроить компиляцию так, чтобы методы прототипа выглядели так:

MyClass.prototype = {
    foo: function() {},
    bar: function() {}
};


А не так, как сейчас:

MyClass.prototype.foo = function() {};
MyClass.prototype.bar = function() {};



2. Но первый пункт не столько важен, как этот:

class Test {

    constructor() {

    }

    get index():number {
        return 3;
    }

    get name() {
        return '';
    }
    set index(value) {

    }
}


На выходе:
var Test = (function () {
    function Test() {
    }
    Object.defineProperty(Test.prototype, "index", {
        get: function () {
            return 3;
        },
        set: function (value) {
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Test.prototype, "name", {
        get: function () {
            return '';
        },
        enumerable: true,
        configurable: true
    });
    return Test;
})();


Как видно, на каждый геттер/сеттер приходится индивидуальный defineProperty. Можно ли как-то настроить, чтобы было так?

Test.prototype = {
   get index() {
       return 1;
   },
   get name() {
      return '';
   },

   set index(value) {

   }
};


Ну или как минимум через defineProperties.

Использую PHPStorm, там встроенный компилятор, в настройках компиляции ничего нет.
Для меня очень важно, чтобы код на выходе был аккуратным, ничего лишнего.
Ответить с цитированием
  #2 (permalink)  
Старый 30.05.2016, 16:37
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от Ruslan_xDD Посмотреть сообщение
Можно ли как-то настроить, чтобы было так?
Test.prototype = {
   get index() {
       return 1;
   },
   get name() {
      return '';
   },

   set index(value) {

   }
};
Не эксперт TS, но это синтаксис ES6, а TS видимо компилирует в ES5.

upd: а может быть и в ES3 ("TypeScript compiles to ES3-compatible JavaScript. By default the compiler targets ECMAScript 3, the current prevailing standard, and is also able to generate constructs used in ECMAScript 5." wikipedia)

Последний раз редактировалось Rise, 30.05.2016 в 17:09.
Ответить с цитированием
  #3 (permalink)  
Старый 30.05.2016, 18:08
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Ruslan_xDD
1. Можно ли настроить компиляцию так, чтобы методы прототипа выглядели так:
так наследование работать не будет. кэп)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #4 (permalink)  
Старый 30.05.2016, 18:29
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Rise, печалька конечно. Ай ладно, чёрт с ним, на чистом лучше попишу, так на душе будет спокойней, что код не засран лишним.

nerv_,

я вот такое наследование юзаю:

MyClass.prototype = {
   ...

   __proto__: Object.create(ExtendClass.prototype)
};


Тут есть какие-то подводные камни?
Хотя, конечно может не совсем хорошо, что родитель получается будет лежать не в __proto__, а вообще в __proto__.__proto__, так как Object.create уже в __proto__ всё создаёт, но на практике вроде как всё быстро работает, косяков не наблюдается.
Ответить с цитированием
  #5 (permalink)  
Старый 30.05.2016, 18:57
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Ruslan_xDD, там вроде можно настроить в какой стандарт компилировать. Compiler Options Просто ты определись или прототипы (ES5-) или классы (ES6+) нужны на выходе.

Последний раз редактировалось Rise, 30.05.2016 в 19:04.
Ответить с цитированием
  #6 (permalink)  
Старый 30.05.2016, 20:17
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Сообщение от Rise
Не эксперт TS, но это синтаксис ES6, а TS видимо компилирует в ES5.
Это не ES6, такой синтаксис написания геттеров/сеттеров поддерживается с IE9+.

Мне на выходе нужны прототипы, но в нормальном виде (пример в первом посте). Если бы я писал на ES6 всё, то не писал бы тогда на TS.
Ответить с цитированием
  #7 (permalink)  
Старый 30.05.2016, 21:00
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Ruslan_xDD, а ну да, еще лучше как я понял такая запись стала доступна с ES5, тогда попробуй компилить в его.
Ответить с цитированием
  #8 (permalink)  
Старый 30.05.2016, 21:29
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Rise, все равно тоже самое выдаёт. Пишу tsc -t es5
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TypeScript vs ES6 caetus Общие вопросы Javascript 17 18.03.2016 12:37
Профессиональная настройка Яндекс Директ и Google Adwords Alex.Directolog Работа 0 28.08.2015 20:30
TypeScript for Large App Angularjs kodermax Angular.js 1 25.03.2015 22:58
Как бы скоро не пришлось писать на Dart, TypeScript ... Gozar Оффтопик 93 21.03.2014 15:46
настройка привилегий фф Zzet Firefox/Mozilla 1 04.03.2010 15:12