Я написал производство TymerctScript на несколько лет и как хобби на пару лет дольше, чем это. Если вы никогда не использовали TypeScript раньше, быстрый способ описать это то, что это ES2015 + и типы, брошенные вместе. Т.е. Современный JavaScript с настоящим типом.
Typeycript – это потрясающий, и я люблю писать его и со временем, я заметил свой собственный стиль, и мои собственные образцы появляются одним из которых я хотел бы поделиться и, надеюсь, оправдываю, почему я придерживаюсь этих моделей.
Локальные интерфейсы> Глобальные интерфейсы
Интерфейсы в Teadercript являются по существу определения объекта, которые описывают, как объект должен минимально выглядеть как. Например, если бы у меня был DatabaseConfig Интерфейс, это может выглядеть что-то подобное:
interface DatabaseConfig {
host: string,
port: number,
password: string
}
function connectToDb(dbConfig: DatabaseConfig) {
// database connection config
}
Что это в основном означает, что всякий раз, когда вы называете функцию ConnectTodb. , вам нужно пройти в объекте, который выглядит как DatabaseConfig Интерфейс (вместе с соответствующими наборами для его свойств).
Узор, который я поднял из статьи со стилью Голанга (я не могу вспомнить, какой) был идеей «локальных интерфейсов», интерфейсов, которые точно описывают то, что мне нужно от объекта в пределах этого единственного файла.
Это DatabaseConfig Интерфейс, если он обделяется, будет расти в геометрической основе, чтобы охватить потребности каждой функции, которая может прикоснуться к этому объекту. А СоздатьАбасеполь Функция может быть дополнительно искать Pursize Свойство на этом конфигуре, которое теперь будет требуется каждой функцией, которая ссылается на этот интерфейс, используют ли они это или нет. Представьте, что у нас также была функция, которая вернет драйвер для этой конкретной базы данных, поэтому нам может понадобиться Тип Свойство, которое никаких функций не заботится о том, кроме драйвера одного.
В основном, совместное использование интерфейсов (или использование того, что я звоню Глобальные интерфейсы ) вызывает раздувание интерфейсов и наложить искусственные требования к свойствам, которые могут даже не использоваться функцией/блоком/кодом/все, что ссылается на интерфейс. Это создает странную «муфту» между возможноными неродными кусками кода.
Вместо этого я предлагаю писать интерфейсы локальным в файл, который описывает только необходимые свойства, необходимые для того, чтобы находиться в объекте кода в этом файле. Например. Если у вас есть Createpool Функция, вы можете написать что-то вроде этого:
interface PoolConfig {
poolSize: number
}
export function createPool(config: PoolConfig, driver) {
// uses config.poolSize somewhere in the code
}
Таким образом, мы говорим разработчику, работаю в этом файле, что все, что нам действительно нужно, это Pursize И мы не используем ничего другого из этого объекта Config.
Я обнаружил, что это очень полезно в соответствии с идеей, что типы действительно просто документация, что компьютер также может просматривать и использовать.
Исключения
Есть пара исключений из этого правила.
Эти исключения в том, что если вы используете модели объектов для ваших данных, вы, возможно, захотите иметь эти модели, доступные в качестве интерфейсов, которые также могут взаимодействовать с разработчиком (и компилятором), что вы действительно нуждаетесь в этой модели.
Возможно, вы не заботитесь о точных ключах, вы можете заботиться о том, чтобы получить фактическую модель (или что-то с той же формой).
Другое исключение из правила заключается в том, что если у вас есть сложные объекты, которые требуют отставания со своей сложной формой. Представьте, что у вас есть объект, который гнезет 5 уровней глубоко. Чтобы иметь более разумный интерфейс, который вы импортируете, который описывает это, а не писать, совершенно бесполезно, сложные вложенные интерфейсы.
Оригинал: “https://dev.to/antjanus/keep-your-types-and-interfaces-closer-in-typescript-497i”