Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Настройка компиляции TypeScript (https://javascript.ru/forum/misc/63301-nastrojjka-kompilyacii-typescript.html)

ruslan_mart 30.05.2016 15:37

Настройка компиляции 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, там встроенный компилятор, в настройках компиляции ничего нет. :(
Для меня очень важно, чтобы код на выходе был аккуратным, ничего лишнего.

Rise 30.05.2016 16:37

Цитата:

Сообщение от Ruslan_xDD (Сообщение 418001)
Можно ли как-то настроить, чтобы было так?
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)

nerv_ 30.05.2016 18:08

Цитата:

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

так наследование работать не будет. кэп)

ruslan_mart 30.05.2016 18:29

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

nerv_,

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

MyClass.prototype = {
   ...

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


Тут есть какие-то подводные камни?
Хотя, конечно может не совсем хорошо, что родитель получается будет лежать не в __proto__, а вообще в __proto__.__proto__, так как Object.create уже в __proto__ всё создаёт, но на практике вроде как всё быстро работает, косяков не наблюдается.

Rise 30.05.2016 18:57

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

ruslan_mart 30.05.2016 20:17

Цитата:

Сообщение от Rise
Не эксперт TS, но это синтаксис ES6, а TS видимо компилирует в ES5.

Это не ES6, такой синтаксис написания геттеров/сеттеров поддерживается с IE9+.

Мне на выходе нужны прототипы, но в нормальном виде (пример в первом посте). Если бы я писал на ES6 всё, то не писал бы тогда на TS.

Rise 30.05.2016 21:00

Ruslan_xDD, а ну да, еще лучше :) как я понял такая запись стала доступна с ES5, тогда попробуй компилить в его.

ruslan_mart 30.05.2016 21:29

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


Часовой пояс GMT +3, время: 09:22.