Что такое предметно-ориентированный язык? Кто-либо использующий его? И каким образом?

Нет, вы не можете наследовать тип Props от типа component. Это просто невозможно с TypeScript

Вы также не можете сделать это напрямую, если используете стандартные интерфейсы для AnchorProps и ParagraphProps вместо стандартных React.AnchorHTMLAttributes<HTMLAnchorElement> и React.HTMLAttributes<HTMLParagraphElement> [ 1110]

Однако, если ваш компонент Anchor использует те же параметры, что и стандарт HTMLAnchorElement, можно достичь желаемого результата всего за несколько строк.

declare const Anchor: React.ComponentType<React.AnchorHTMLAttributes<HTMLAnchorElement>>
declare const Paragraph: React.ComponentType<React.HTMLAttributes<HTMLElement>>

type Overrides = {
  [tag in keyof JSX.IntrinsicElements]?: {
    component: React.ComponentType<JSX.IntrinsicElements[tag]>,
    props?: JSX.IntrinsicElements[tag]
  }
}

const overrides: Overrides = {
  a: {
    component: Anchor,
    props: {
      href: 'str', // ok
      broken: true // error, as expected
    }
  },
  p: {
    component: Paragraph
  }
}
100
задан hippietrail 9 November 2019 в 03:53
поделиться

6 ответов

Специфичный для домена язык - это язык, который написан для работы с конкретным доменом или набором проблем. Их много, таких как make, ant и rake для описания сборок программного обеспечения, или lexx и yacc для языковой конструкции. В последние годы они стали популярными, поскольку некоторые вещи объединились, чтобы их было легче строить. Большой среди этих вещей была растущая популярность Ruby, который имеет несколько функций, облегчающих создание новых DSL.

Мартин Фаулер является большим сторонником этой идеи, как здесь .

106
ответ дан 24 November 2019 в 04:50
поделиться

DSL - предметно-ориентированный язык. Давайте запустим то, что является доменом - домен является некоторой определенной областью, объемом. Этот домен может быть видом веб-сайта, и Вы имеете для него, CSS и второй домен могут быть структурой веб-сайта, и здесь у Вас есть HTML.

, Но, доменом может быть также Компания X Приложений. И в пределах этого домена может быть создан некоторый язык. Язык не означает - полностью приправленная вещь с собственной пастбищной травой, синтаксисом, compilator или временем выполнения. DSL может быть просто списком инструментов, которые решают доменные проблемы.

Позволяет, полагают, что ООП и его модель представляют объекты области классами и методами как те поведения объектов. Если мы создаем такую структуру и даем эти поведения объектов, то мы можем написать код с помощью тех понятий. Рассмотрите этот псевдо пример кода:

cookie = async getCookie(cookieId)
user = async getUser(userId)
result async user.buy(cookie)
if (result.isError()) {
  error.showAlert("User has not enough money")
} else {
  confirmation.showSuccess("Cookie was bought")
}

, Сколько сверху GPL (язык общего назначения) и сколько определенная доменная терминология и инструменты. Это - соединение два, но все команды являются здесь зависящими от домена. Это сказало, что мы можем сказать, что выше записан в DSL, где домен является некоторым приложением x

, Продвигающимся с этим примером, я могу создать еще более абстрактные инструменты, и главным образом выполнить поток управления теми инструментами, рассмотреть (это - больше FP, но надежда, Вы получаете то, что я имею в виду):

waitForMany(getCookie(cookieId), getUser(userId)
  .andThen([cookie, user] -> user.buy(cookie))
  .andThen(showSuccess("Cookie was bought"))
  .whenError(showError("User has not enough money"))

, Поскольку Вы видите, что я смог абстрагировать довольно много и использовать эту абстракцию для выполнения потока управления. И все основано на GPL и работах в пределах GPL.

Для раскрытия истины все мы пишем DSL, каждая зависящая от домена абстракция, которую можно использовать, добра это. Но большинство из тех абстракция не является полными решениями, именно поэтому мы палатка для не использования этого слова слишком часто. Но если у Вас есть набор инструментов, функции, которые абстрагируют Ваш домен, они формируют вид DSL.

, Что является также DSL, многими вещами, например, любая платформа, которая обеспечивает ряд правил, является DSL. Если Вы видите, что кто-то утверждает, что он, Реагируют разработчик, то Вы знаете, что он - Зависящий от домена Разработчик, как Реагируют, точно DSL, который альтернативен для использования собственной веб-платформы. Если можно составить функциональность из существующих зависящих от домена инструментов тогда, Вы пишете использованию DSL. Движение глубже в Реагирует, извините все люди не от этого DSL: D, можно создать набор компонентов и составить их как стандартные блоки и hurra!, теперь Вы сделали DSL сверху DSL.

Да повторил DSL слишком много раз здесь, извините.

0
ответ дан 24 November 2019 в 04:50
поделиться

Вы можете думать о DSL как о слишком сложных аргументах для функций, написанных на более общем языке программирования. Настоящий язык программирования анализирует код DSL и что-то с ним делает, как правило, код DSL фокусируется только на , что вы хотите сделать, а более крупная система вычисляет как .

Примеры DSL включают все языки запросов (SQL, XPath, ...), все языки шаблонов (Django, Smarty, ...), сценарии оболочки, особенно включая такие вещи, как twill, веб-браузер, управляемый командами (в основном используется для автоматического тестирования), языков хранения и обмена данными (XML, YAML, ...) и языков документов, таких как LaTex, HTML или CSS.

Некоторые языки с очень гибким синтаксисом, такие как TCL и Lisp, создают свои DSL непосредственно в язык ... когда возможно. Большинство языков используют строки, обычно загружаются из внешних файлов.

Есть ли какие-то особые преимущества их использования? Использование их по назначению очень выгодно в том смысле, что вы обращаетесь к ним, не зная, точно так же, как вы использовали (я предполагаю) SQL или HTML, не считая их DSL.

Я осмелюсь сказать, что есть достаточно DSL для любого вида приложений, которые вам могут понадобиться; почти наверняка вам не нужно учиться писать свой собственный.

осмелюсь сказать, что существует достаточно DSL для любого вида приложений, которые вам могут понадобиться; почти наверняка вам не нужно учиться писать свой собственный.

осмелюсь сказать, что существует достаточно DSL для любого вида приложений, которые вам могут понадобиться; почти наверняка вам не нужно учиться писать свой собственный.

60
ответ дан 24 November 2019 в 04:50
поделиться

(обращаясь к сути вопроса)

Я думаю, что впервые когда-то увидел DSL и его определение как «предметно-ориентированный язык» Я также Я подумал, что это был конкретный, конкретный язык , о котором я только что не слышал - но, нет, это общий термин для языков, которые адаптированы для конкретной области применения.

Как ни странно, если вы только что услышали о TCL как о «языке команд инструмента», вы могли бы подумать, подобно DSL, что будет много TCL для различных инструментов - но, нет, это конкретное имя определенного языка сценариев.

12
ответ дан 24 November 2019 в 04:50
поделиться

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

Противоположным языку для конкретных доменов (DSL) является язык общего назначения .

9
ответ дан 24 November 2019 в 04:50
поделиться

DSL - хороший способ разработать язык, который будет использоваться непрограммистами. Например, если у вас есть DSL для финансовых сотрудников компании, вместо того, чтобы программировать их спецификации, вы можете просто позволить им написать программу, которую они хотят. Затем, если он работает слишком медленно, вы можете взять то, что они написали, и работать так, как они хотят, написать на скомпилированном языке, чтобы ускорить его.

8
ответ дан 24 November 2019 в 04:50
поделиться
Другие вопросы по тегам:

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