TypeScript+Knockout - покритикуйте проект
От: LandWarrior  
Дата: 18.10.18 06:18
Оценка:
Вот, проба пера, так сказать. Что тут можно улучшить в части TypeScript и Knockout?
Re: TypeScript+Knockout - покритикуйте проект
От: bnk СССР http://unmanagedvisio.com/
Дата: 18.10.18 07:30
Оценка: +1
Здравствуйте, LandWarrior, Вы писали:

LW>Вот, проба пера, так сказать. Что тут можно улучшить в части TypeScript и Knockout?


Можно отказаться от использования knockout, как морально устаревшего.
Re[2]: TypeScript+Knockout - покритикуйте проект
От: LandWarrior  
Дата: 18.10.18 08:18
Оценка:
LW>>Вот, проба пера, так сказать. Что тут можно улучшить в части TypeScript и Knockout?

bnk>Можно отказаться от использования knockout, как морально устаревшего.


Понимаю, но не сейчас. Это просто часть проекта, где knockout надо будет заменять. Но для начала я планирую внедрить TypeScript туда. Поэтому интересно мнение в перую очередь про то, что можно в моем TS улучшить.
Re[3]: TypeScript+Knockout - покритикуйте проект
От: TimurSPB Интернет  
Дата: 18.10.18 09:26
Оценка:
LW>что можно в моем TS улучшить.
Можно не коммитить *.map файлы.
Make flame.politics Great Again!
Re[4]: TypeScript+Knockout - покритикуйте проект
От: LandWarrior  
Дата: 18.10.18 11:10
Оценка:
Здравствуйте, TimurSPB, Вы писали:

LW>>что можно в моем TS улучшить.

TSP>Можно не коммитить *.map файлы.

Ну это так, космкетика. Что-нибудь посущественнее есть на вскидку?
Re: TypeScript+Knockout - покритикуйте проект
От: Twirl Швеция  
Дата: 18.10.18 12:08
Оценка:
Здравствуйте, LandWarrior, Вы писали:

LW>Вот, проба пера, так сказать. Что тут можно улучшить в части TypeScript и Knockout?


То что заметилось по быстрому:
1. Перейти на стандартную сборку через gulp/webpack/parcel
2. Использовать для веб зависимостей npm/yarn
3. Использовать современный яваскрипт (es2015+) с транспиляцией в es5 (или что там у вас необходимо поддерживать) (promise, await, import)
4. Не использовать module в TS, если сильно хочется то использовать для этого namespace
5. Не использовать /// <reference, вместе этого лучше использовать обычный импорт или включить этот .d.ts в tsconfig
6. Использовать везде интерфейсы в TS чаще всего не нужно, они нужны только если нету класса или несколько классов имеют общий конткракт
7. Не использовать замыкания для member functions. Это скорее вопрос вкуса, но для меня выглядит странно. Я бы использовал обычные функции.
Вместо
AddCustomer = (elem: CustomerIntrerfaces.ICustomer): void => {
            this.service.Insert(elem, (d) => {
                var tt = 0;
            });
            this.customers.push(elem);
        }


public addCustomer (elem: CustomerIntrerfaces.ICustomer): void {
            this.service.Insert(elem, (d) => {
                var tt = 0;
            });
            this.customers.push(elem);
        }
Отредактировано 18.10.2018 12:22 Twirl . Предыдущая версия . Еще …
Отредактировано 18.10.2018 12:17 Twirl . Предыдущая версия .
Re[2]: TypeScript+Knockout - покритикуйте проект
От: LandWarrior  
Дата: 18.10.18 12:36
Оценка:
T>7. Не использовать замыкания для member functions. Это скорее вопрос вкуса, но для меня выглядит странно. Я бы использовал обычные функции.
T>Вместо
T>
T>AddCustomer = (elem: CustomerIntrerfaces.ICustomer): void => {
T>            this.service.Insert(elem, (d) => {
T>                var tt = 0;
T>            });
T>            this.customers.push(elem);
T>        }
T>


T>
T>public addCustomer (elem: CustomerIntrerfaces.ICustomer): void {
T>            this.service.Insert(elem, (d) => {
T>                var tt = 0;
T>            });
T>            this.customers.push(elem);
T>        }
T>


А вот тут начинается полная хрень, потому как я броузере я получаю this.customers == NULL, если без замыканий. Как обойтись без них?
Re[2]: TypeScript+Knockout - покритикуйте проект
От: LandWarrior  
Дата: 18.10.18 12:58
Оценка:
T>Вместо
T>
T>AddCustomer = (elem: CustomerIntrerfaces.ICustomer): void => {
T>            this.service.Insert(elem, (d) => {
T>                var tt = 0;
T>            });
T>            this.customers.push(elem);
T>        }
T>


T>
T>public addCustomer (elem: CustomerIntrerfaces.ICustomer): void {
T>            this.service.Insert(elem, (d) => {
T>                var tt = 0;
T>            });
T>            this.customers.push(elem);
T>        }
T>


Пересобрал — получаю this.service равное NULL. И в this назодится CustomerModule.Customer, а не CustomerUIModel. Как мне тогда правильно без замыканий написать это?
Re[3]: TypeScript+Knockout - покритикуйте проект
От: Twirl Швеция  
Дата: 18.10.18 12:59
Оценка:
Здравствуйте, LandWarrior, Вы писали:

LW>А вот тут начинается полная хрень, потому как я броузере я получаю this.customers == NULL, если без замыканий. Как обойтись без них?

Может быть метод вызывается раньше чем приходят данные? С knockout очень давно не работал...

Я бы для начала избавился от:
1. any везде где можно, если везде использовать any, то смысл использовать TS? Вместе any использовать конкретные классы/интерфейсы для данных
2. callback-hell, допустим вместо:
    var svc = new CustomerServiceModule.CustomerService();
    svc.GetAll(function (dt) {

        var customerUI = new CustomerUIModule.CustomerUIModel(svc, dt);

        ko.applyBindings(customerUI);

    });


использовать

    var svc = new CustomerServiceModule.CustomerService();
    const customers = await svc.GetAll();
    const customerUI = new CustomerUIModule.CustomerUIModel(svc, customers);
    ko.applyBindings(customerUI);


Завести tsconfig файл где четко указать в какую версию яваскрипта компилировать (ну и очень рекомендую strict: true если с нуля проект)
Re[4]: TypeScript+Knockout - покритикуйте проект
От: LandWarrior  
Дата: 18.10.18 13:30
Оценка:
Вот на этом
const customers = await svc.GetAll();


при сборке выдает

main.ts(11,23): error TS1308: Build:'await' expression is only allowed within an async function.


Как мне тогда $(document).ready() заменить?
Re: TypeScript+Knockout - покритикуйте проект
От: achmed Удмуртия https://www.linkedin.com/in/nail-achmedzhanov-9907188/
Дата: 13.11.18 13:56
Оценка:
Здравствуйте, LandWarrior, Вы писали:

LW>Вот, проба пера, так сказать. Что тут можно улучшить в части TypeScript и Knockout?


Первое что бросилось в глаза: вместо var использовать const и let.

Вместо калбэков использовать Promise и async/await.

Рекомендую настроить tslint, который покажет рекомендации по best practices, в том числе по var.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.