Fresh — современный фреймворк для разработки веб-приложений на JavaScript и TypeScript, построенный на Deno. Поддержка TypeScript в Fresh реализована из коробки, что позволяет писать безопасный и масштабируемый код без дополнительных инструментов компиляции.
При создании проекта Fresh с TypeScript используется команда:
deno run -A -r https://fresh.deno.dev my-app
По умолчанию Fresh создаёт проект с поддержкой TypeScript. В
структуре проекта появляются файлы с расширением .ts и
конфигурационный файл tsconfig.json.
tsconfig.jsonФайл tsconfig.json управляет поведением компилятора
TypeScript. В Fresh он содержит оптимальные настройки для
веб-разработки:
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"lib": ["DOM", "DOM.Iterable", "ESNext"],
"strict": true,
"jsx": "react-jsx",
"jsxImportSource": "$fresh/runtime",
"noEmit": true,
"moduleResolution": "Node",
"resolveJsonModule": true,
"isolatedModules": true,
"allowJs": false
},
"include": ["./**/*.ts", "./**/*.tsx"],
"exclude": ["node_modules"]
}
Ключевые параметры:
ESNext обеспечивает поддержку последних
возможностей языка.ESNext
совместим с Deno..js файлы, так как Deno компилирует их
напрямую.Проект разделяется на несколько типов файлов:
routes/*.tsx — маршруты приложения,
каждый файл соответствует URL.islands/*.tsx — интерактивные
компоненты, которые компилируются отдельно для клиента.components/*.tsx — статические
компоненты без состояния или с серверной логикой.utils/*.ts — вспомогательные функции,
общие для сервера и клиента.Каждое расширение .tsx используется там, где
присутствует JSX. В чистых .ts файлах JSX не
используется.
TypeScript позволяет создавать строгие типы для props компонентов и данных API:
interface User {
id: number;
name: string;
email: string;
}
export function UserCard({ user }: { user: User }) {
return (
<div>
<h2>{user.name}</h2>
<p>{user.email}</p>
</div>
);
}
Использование интерфейсов и типов обеспечивает проверку на этапе компиляции и упрощает автодополнение в редакторах.
Fresh позволяет использовать абсолютные пути для модулей. В
tsconfig.json можно настроить paths:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@components/*": ["components/*"],
"@islands/*": ["islands/*"]
}
}
}
Пример использования:
import { UserCard } from "@components/UserCard.tsx";
Это упрощает структуру импорта и делает код более читаемым.
Deno автоматически проверяет TypeScript-файлы при запуске:
deno task start
Ошибки типов выводятся в консоль, что исключает запуск приложения с некорректным кодом. Для более глубокой проверки можно использовать:
deno check .
Fresh рекомендует использовать встроенные инструменты Deno:
Конфигурация этих инструментов хранится в deno.json и
может быть расширена под проектные стандарты.
Для сторонних модулей, загружаемых через URL, TypeScript
автоматически подхватывает типы, если они экспортируются вместе с
библиотекой. В противном случае можно использовать
@types-аналог, но в Deno чаще применяются встроенные
декларации.
any и максимально использовать строгие типы
для предотвращения ошибок в рантайме.TypeScript в Fresh обеспечивает сочетание строгой проверки типов, гибкости JSX и нативной поддержки Deno, что делает код безопасным, читаемым и легко поддерживаемым.