Рубрики
Без рубрики

Держите свои типы и интерфейсы ближе (В типографии)

Shotescript Interfaces – это мощные инструменты, но они должны быть использованы вправо; В противном случае ваш код становится большим беспорядком. Теги с WebDev, Web, JavaScript, Teadercript.

Я написал производство 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”