Настройка компилятора TypeScript

119
23 января 2021, 20:00

Есть ли способ заставить Классы в TypeScript компилироваться в Фабричные Функции, где приватные свойства и методы не будут попадать в прототип? Где такое:

class SomeClass {
    private foo = 1;
    private func1() {
        return this.foo;
    }
    public func2() {
        return this.func1();
    }
}

Будет в итоге примерно таким:

var SomeClass = (function () {
    let foo = 1;
    function func1() {
        return foo;
    }
    SomeClass.prototype.func2 = function () {
        return func1();
    }
    return SomeClass;
}());
Answer 1

Напрямую TypeScript не предоставляет возможности скрыть что-то типизацией, так как она видна только транспилятору и не отображается в его выхлопе. Однако, вы можете скрыть что-либо, использовав Namespace.

namespace Testing {
    namespace Internal {
        export class Something extends React.Component<any, any> {
            constructor(props) {
                super(props);
            }
            public render = () => {
                return (
                    <>
                        <p>Something: {this.props.something}</p>
                        <button onClick={() => this.props.dispatchSomething("new something")}>Update something</button>
                    </>
                );
            }
        }
    }
    function mapStateToProps(state: State) {
        return {
            something: state.something,
        };
    }
    function mapDispatchToProps(dispatch: Redux.Dispatch) {
        return {
            dispatchSomething: (something) => dispatch({type: ActionType.SomeAction, something: something}),
        };
    }
    export const Something = ReactRedux.connect(mapStateToProps, mapDispatchToProps)(Internal.Something);
}

Применив эту синтаксическую конструкцию можно использовать ReactRedux ограничившись сборщиком бандлов, встроенным в сам TypeScript. В результате транспиляции этого кода получится следующая конструкция с замыканием:

var Testing;
(function (Testing) {
    var Internal;
    (function (Internal) {
        var Something = (function (_super) {
            __extends(Something, _super);
            function Something(props) {
                var _this = _super.call(this, props) || this;
                _this.render = function () {
                    return (React.createElement(React.Fragment, null,
                        React.createElement("p", null,
                            "Something: ",
                            _this.props.something),
                        React.createElement("button", { onClick: function () { return _this.props.dispatchSomething("new something"); } }, "Update something")));
                };
                return _this;
            }
            return Something;
        }(React.Component));
        Internal.Something = Something;
    })(Internal || (Internal = {}));
    function mapStateToProps(state) {
        return {
            something: state.something
        };
    }
    function mapDispatchToProps(dispatch) {
        return {
            dispatchSomething: function (something) { return dispatch({ type: "some-action", something: something }); }
        };
    }
    Testing.Something = ReactRedux.connect(mapStateToProps, mapDispatchToProps)(Internal.Something);
})(Testing || (Testing = {}));
READ ALSO
Найти экземпляр объекта/класса Javascript

Найти экземпляр объекта/класса Javascript

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

127
JavaScript print . Как распечатать документ без лишних footer header

JavaScript print . Как распечатать документ без лишних footer header

Как распечатать документ без footer и headerНе знаю как это по другому назвать, поэтому прошу прощение

103
ранжирование по степени важности

ранжирование по степени важности

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

105
JavaScript. Print , как менять размер страницы

JavaScript. Print , как менять размер страницы

Есть принтер PT-2430PC https://supportbrother

115