169 похожих чатов

Начал использовать TS не так давно и возник вопрос, какие

имеются практики работы с типами?

- Хранить и объявлять типы прямо в компоненте
- Держать все типы в файле и экспортировать
- записать в d.ts файлы

Я немного запутался, помогите советом, пожалуйста

24 ответов

16 просмотров

В файлах .model.ts или.enum.ts

Eric-Rovell Автор вопроса
Igor Filippov
В файлах .model.ts или.enum.ts

почему не d.ts? Чем мне понравился этот подход, то импортировать типы не нужно. Правда, в таком случае требуется namespacing

Eric Rovell
почему не d.ts? Чем мне понравился этот подход, то...

d.ts то для библиотечных аннотаций. Как раз таки лучше импортировать типы и юзать их. Так когнитивная нагрузка на программиста меньше

- если типы нужны только модулю, то хранить и объявлять их внутри этого же модуля - если типы являются частью публичного интерфейса только одного модуля, то хранить, объявлять и экспортировать в этом же модуле - если типы описывают какую-то универсальную сущность, которая может использоваться\создаваться в разных модулях, то их надо хранить в отдельном модуле и не смешивать с другими типами. То есть не надо делать файл types.ts и сваливать туда все такие типы, нужно разбивать по разным файлам по доменам использования. - про d.ts для своего кода можешь забыть, создавать d.ts это работа комплиятора. d.ts нужен только если ты хочешь импортировать npm модуль, а для него нет уже написанной типизации. Тогда ты создаешь d.ts и типизируешь этот модуль сам. Так же через d.ts описываются *.json, *.svg, *.css модули. Типы вырезаются после компиляции вместе с их импортами, поэтому отделять типы от их реализации без особой нужды бессмысленно

Я в context=module описываю сейчас и экспортирую оттуда же. Это для компонентов, а если общие то папочка types

Alexander Ponomarev
- если типы нужны только модулю, то хранить и объя...

Хм, по поводу d.ts может я чего не понял, но как же настройка генерирующая эти файлы при компиляции сорцов?

Pavel 🦇 Malyshev
Хм, по поводу d.ts может я чего не понял, но как ж...

Есть npm модули написанные на JS и для которых нет встроенных тайпингов и нет тайпингов в репе DefinetelyTyped. Чтобы их использовать в тайпскрипте придется написать для них d.ts (если конечно тсконфиг не бесполезный который позволяет все что угодно). Это один из обычных кейсов где нужно писать руками d.ts файл. В остальных случаях сам tsc их генерирует при компилции кода =)

Pavel 🦇 Malyshev
Я в context=module описываю сейчас и экспортирую о...

А кстати, всегда интересовало, чем в таком случае плохо держать типы в отдельных файлах и иклудить их на уровне компилятора, а в файлах использовать declare? Если что, не работал с ТС в Свелт, мб там есть какие-нибудь особенности на этот счёт?

Alexey Solovyov
А кстати, всегда интересовало, чем в таком случае ...

тем что названия будут иметь коллизии, а ТС типы мержит с одинаковыми названиями

Eric-Rovell Автор вопроса
Alexander Ponomarev
- если типы нужны только модулю, то хранить и объя...

На данный момент, если тип используется только в самом компоненте, держу его в module=context самого компонента. Если же тип встречается слишком часто, то создал main.d.ts, в который указываю: /// <reference path="./module.d.ts" /> В подобных модулях всегда держу namespaces. Импорты везде и повсюду надоели и попробовал так, в итоге глобально всё доступно, добавив в tsconfig "files": [ "src/types/main.d.ts" ] Пробую всякое, в общем, ради интереса😅

Eric Rovell
На данный момент, если тип используется только в с...

namespaces это вообще источник неисчерпаемых проблем

Alexey Solovyov
А кстати, всегда интересовало, чем в таком случае ...

а как же co-location.)))) так то и стили можно писать в отдельных файлах и шаблоны с логикой.

Eric-Rovell Автор вопроса
Pavel 🦇 Malyshev
Я в context=module описываю сейчас и экспортирую о...

Если в проекте используется реэкспорт, то как лучше называть имена эскпортируемых из контекста типов?

Eric Rovell
Если в проекте используется реэкспорт, то как лучш...

Универального способа не знаю. Сам пару раз сталкивался. Решал на уровне реэкспортов, оставляя имена внутри самих компонентов максимально простыми и очевидными

Pavel 🦇 Malyshev
Я в context=module описываю сейчас и экспортирую о...

а в context=module реактивность и остальные плюшки работают (биндинг в шаблон и пр.)?

Alexander Ponomarev
- если типы нужны только модулю, то хранить и объя...

👍 лучший из всех подходов. Сам так же делаю, и другим советую

Alexander Ponomarev
- если типы нужны только модулю, то хранить и объя...

про d.ts чуть спорный момент - к примеру в него удобно складывать интерфейсы и шарить между проектами в монорепе. Там хорошо живут контракты апи к примеру, и не нужно их импортить через кучу .. или алиасы

Eric-Rovell Автор вопроса
Konstantin Nosov
про d.ts чуть спорный момент - к примеру в него уд...

Мне тоже показалось удобным без импортов. Хотелось именно для каких-то глобальных типов для проекта, а не специфичных для данного компонента. Но сторонников такого подхода оказалось мало😅

Konstantin Nosov
про d.ts чуть спорный момент - к примеру в него уд...

они так же хорошо живут в отдельном пакете и импортятся оттуда

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта