Nikolay
И сталкивался ещё с проблемой проверки типов при десериализации JSON. Можно очень весёлых багов нахвататься, если ты будешь работать с полем, как с числом, а в жсон тебе оно прелетело как строка
Nikolay
Фил Ранжин
Фил Ранжин
Фил Ранжин
но ты все же не прав
Vasily
Эххх... растут детишки... вот уже писюнами начали меряться...
Фил Ранжин
я как раз про этот кейс и пишу
Nikolay
Мне нравится typescript, но он не интегрируется нормально с существующими решениями.
Nikolay
Фил Ранжин
Roman
Nikolay
Фил Ранжин
Nikolay
Фил Ранжин
Сырую
ну подожди тогда до завтра, я как раз сегодня основной блок вкорячу
Nikolay
Sergey
Утото тут кидал пикчу про тс и жс
Sergey
@angmarr помоему твоя пикча была😏
Фил Ранжин
Фил Ранжин
для меня лично мощным сигналом, что тс охеренный был jsx
Фил Ранжин
бля, митинг
Nikolay
Фил Ранжин
ща объясню
Фил Ранжин
20 мин
Igor
Nikolay
Щас гляну код с tsx
Nikolay
Покажу :D
Ιπταμενο
Мужики вы чего
Ιπταμενο
Лучше с тс, чем совсем без линтера
Ιπταμενο
Совсем без линтера даже rename refactor не работает, просто ложишься в гроб и умираешь
Nikolay
Ιπταμενο
Чистый js это когда у тебя много времени на борьбу с инструментом
Sergey
Igor
Вот уже еще 20 лет замызывают все вот-зе-факи
Фил Ранжин
Ты про tsx?
короче. Я много писал на впф и замарине. На строгом шарпе. И вот в разметке тайпчек очень символический там. А в tsx - мощный. В костыльном вот этом вот тайпскрипте у меня лучше тайпчек, когда я пишу фронт.
Nikolay
Вот как у меня было
interface IProps {
dispatch?: Dispatch<any>;
loading: boolean;
previews: BlaBla[];
}
class HomePage extends NavigateableComponent<IProps> {
constructor(props: IProps) {
super(props);
props.dispatch(actions.action());
}
}
function mapStateToProps(store: IStore): IProps {
return {
loading: store.previews.isLoading,
previews: store.previews.previews
};
}
const connectedHomePage = connect(mapStateToProps)(HomePage);
export {connectedHomePage as HomePage};
Функция dispatch никогда не может быть null, но пришлось её сделать nullable потому, что в функции mapStateToProps возвращаются только изменённые пропсы, а если мы не хотим менять значение, тогда мы не должны передавать туда пропсу, и она не поменяется, но в таком случае строгая типизация будет требовать указания значения функции dispatch
Анна
Фил Ранжин
Фил Ранжин
Partial<IProps>
George
или через перегрузку connect<IStoreProps, IDispatchProps, IOwnProps, IState>
Sergey
@angmarr нашель🌚
Sergey
TypeScript - это не ужас, а максимальное приближени JS к конфете
Sergey
https://www.hancocks.co.uk/media/catalog/product/cache/1/image/e4c35dd85cc90aaf08d78642d6b956d2/3/0/302160_giant_gummy_poo_j.jpg
Ну ты понял
Nikolay
Vladyslav
вчера была скала, сегодня - тс
Nikolay
Помоему connect принимала тип any, так что в теории можно так сделать
Nikolay
Но, сам понимаешь, тип any убивает типизацию
Фил Ранжин
меня это пиздец бесит
Фил Ранжин
смотри
Nikolay
Тогда функция connect сама должна подсказывать
Фил Ранжин
у тебя есть сторонняя хуйня, которая принимает эни
Nikolay
Фил Ранжин
а ты знаешь, что именно ей скормить
Фил Ранжин
так хули ты, сделай d.ts
Фил Ранжин
опиши тип
Nikolay
опиши тип
Так я должен типы описывать, или разработчики d.ts?
Nikolay
Тут не всё так просто
Igor
Фил Ранжин
Nikolay
Там не получится так просто сделать
Фил Ранжин
короче, в тс делать any на внешнем апи, это как в F# наружу мутаблами торчать
Фил Ранжин
George
в конце концов, с redux 4 более-менее неплохие тайпдефы подвезли
Nikolay
connect(mapStateToProps)(HomePage)
Нужно вытащить generic тип из HomePage, и запихать его в connect.
Nikolay
Я хз как так сделать
Nikolay
Либо отдельной функцией как-то описывать
Nikolay
В любом случае, инструмент должен помогать тебе задачи решать, а не создавать новые
Nikolay
Когда все будут писать на TS, тогда и будет счастье, но никто этого не собирается делать
J. A. R. Kotlien
Вот как у меня было
interface IProps {
dispatch?: Dispatch<any>;
loading: boolean;
previews: BlaBla[];
}
class HomePage extends NavigateableComponent<IProps> {
constructor(props: IProps) {
super(props);
props.dispatch(actions.action());
}
}
function mapStateToProps(store: IStore): IProps {
return {
loading: store.previews.isLoading,
previews: store.previews.previews
};
}
const connectedHomePage = connect(mapStateToProps)(HomePage);
export {connectedHomePage as HomePage};
Функция dispatch никогда не может быть null, но пришлось её сделать nullable потому, что в функции mapStateToProps возвращаются только изменённые пропсы, а если мы не хотим менять значение, тогда мы не должны передавать туда пропсу, и она не поменяется, но в таком случае строгая типизация будет требовать указания значения функции dispatch
Это уже легаси, так не пишут.
Хуки уже все используют и там проблем нет, потому что хуки, это просто функции, которые ворзвращают результат.
Nikolay
Nikolay
О дивный новый мир
Фил Ранжин
да и в целом, я бы не использовал редакс
J. A. R. Kotlien