Trabalhando com Markdown em TypeScript: bibliotecas, parsers e ferramentas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao Markdown e TypeScript

\n

Markdown é uma linguagem de marcação leve, amplamente utilizada para formatar texto em documentações, arquivos README, blogs e chats. TypeScript, como uma extensão fortemente tipada sobre JavaScript, permite criar aplicações robustas e escaláveis para processamento de Markdown. No site pythonlib.ru, vamos explorar as melhores bibliotecas e ferramentas para trabalhar com Markdown em TypeScript, suas funcionalidades e exemplos de uso.

\n\n

Bibliotecas populares para parsing de Markdown

\n

Existem várias soluções maduras para converter Markdown em HTML ou outros formatos. Vamos considerar três das mais populares:

\n
    \n
  • marked — um parser rápido e leve com suporte à sintaxe GFM (GitHub Flavored Markdown). Possui tipos integrados para TypeScript.
  • \n
  • showdown — um conversor versátil de Markdown para HTML com capacidade de extensão e personalização.
  • \n
  • unified (com o pacote remark) — um ecossistema moderno para processamento de Markdown baseado em AST (árvore sintática abstrata). Permite não apenas fazer parsing, mas também analisar, transformar e formatar Markdown.
  • \n
\n\n

Instalação e configuração

\n

Para começar, instale uma das bibliotecas via npm. Exemplo para marked:

\n
npm install marked\nnpm install @types/marked --save-dev
\n

Para unified com remark, serão necessários vários pacotes:

\n
npm install unified remark-parse remark-html\nnpm install @types/unified @types/remark-parse
\n\n

Exemplo: parsing de Markdown com marked

\n

Vamos criar uma função simples para converter uma string Markdown em HTML:

\n
import { marked } from 'marked';\n\nfunction renderMarkdown(mdContent: string): string {\n    return marked.parse(mdContent);\n}\n\nconst md = `# Título\\n\\nEste é um texto **negrito** e _itálico_.`;\nconst html = renderMarkdown(md);\nconsole.log(html);\n// Saída: <h1>Título</h1>\n// <p>Este é um texto <strong>negrito</strong> e <em>itálico</em>.</p>
\n\n

Trabalhando com AST via unified + remark

\n

A biblioteca unified permite trabalhar com Markdown no nível da árvore. Isso é útil para analisar a estrutura do documento, extrair títulos ou transformar links.

\n
import { unified } from 'unified';\nimport remarkParse from 'remark-parse';\nimport remarkHtml from 'remark-html';\n\nasync function mdToHtml(mdContent: string): Promise<string> {\n    const file = await unified()\n        .use(remarkParse)\n        .use(remarkHtml)\n        .process(mdContent);\n    return String(file);\n}\n\nconst md = `## Segundo nível\\n\\nLista:\\n- Item 1\\n- Item 2`;\nmdToHtml(md).then(console.log);\n// Saída: <h2>Segundo nível</h2>\n// <p>Lista:</p>\n// <ul>\n// <li>Item 1</li>\n// <li>Item 2</li>\n// </ul>
\n\n

Criando um editor Markdown com destaque de sintaxe

\n

Para um site educacional, é útil implementar um editor interativo onde o usuário escreve Markdown e vê uma prévia em HTML com destaque de sintaxe à direita. Usaremos marked e highlight.js para destacar blocos de código:

\n
import { marked } from 'marked';\nimport hljs from 'highlight.js';\n\n// Configuração do marked para usar highlight.js\nmarked.setOptions({\n    highlight: (code: string, lang: string) => {\n        if (lang && hljs.getLanguage(lang)) {\n            return hljs.highlight(code, { language: lang }).value;\n        }\n        return code; // se o idioma não for especificado ou não encontrado\n    }\n});\n\nfunction previewMarkdown(mdContent: string): string {\n    return marked.parse(mdContent);\n}\n\n// Exemplo de uso no navegador (evento input no textarea)\nconst textarea = document.getElementById('editor'                    

Recommendations