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

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

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

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

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

24 ответов

13 просмотров

В файлах .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 чуть спорный момент - к примеру в него уд...

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

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

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

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Я вот подумал. SSE выполняет операции максимум с 64-битной точностью. А FPU - всегда с 80-битной. Разве не должно быть FPU точнее тогда?
The Bird of Hermes
13
как быть с принтером? такой подход прокатит?
zamtmn
12
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Я не понимаю, это троллинг или что? Швабрика поддерживают, который буквально пишет на ассемблере взаимодействия с винапи. Я это ещё написал загрузчик и хоть что-то изучаю в о...
Shadow Akira
6
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Карта сайта