LW>>Вот, проба пера, так сказать. Что тут можно улучшить в части TypeScript и Knockout?
bnk>Можно отказаться от использования knockout, как морально устаревшего.
Понимаю, но не сейчас. Это просто часть проекта, где knockout надо будет заменять. Но для начала я планирую внедрить TypeScript туда. Поэтому интересно мнение в перую очередь про то, что можно в моем TS улучшить.
Здравствуйте, 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. Это скорее вопрос вкуса, но для меня выглядит странно. Я бы использовал обычные функции.
Вместо
T>7. Не использовать замыкания для member functions. Это скорее вопрос вкуса, но для меня выглядит странно. Я бы использовал обычные функции. T>Вместо T>
Пересобрал — получаю this.service равное NULL. И в this назодится CustomerModule.Customer, а не CustomerUIModel. Как мне тогда правильно без замыканий написать это?
Здравствуйте, 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 если с нуля проект)