1.5 — TypeScript ou JavaScript: o que escolher

Entenda as opcoes de tipagem no ecossistema Svelte, o que o proprio criador do Svelte pensa sobre TypeScript e qual caminho seguir neste curso.

Objetivos da Aula

  • Entender o que e TypeScript e por que ele existe
  • Conhecer JSDoc como alternativa ao TypeScript
  • Saber a posicao do time Svelte sobre tipagem
  • Entender as opcoes do wizard (“TypeScript syntax” vs “JSDoc” vs “No”)
  • Decidir com confianca qual opcao escolher

O que e TypeScript?

TypeScript e um superset do JavaScript criado pela Microsoft. Ele adiciona tipos estaticos ao JavaScript — ou seja, voce declara que uma variavel e uma string, um numero, um array, etc., e o editor te avisa se voce cometer um erro.

// TypeScript
let nome: string = 'Svelte'
let versao: number = 5

// Erro! TypeScript avisa antes de rodar
versao = 'cinco'
// ❌ Type 'string' is not assignable to type 'number'

Sem TypeScript, esse erro so apareceria em tempo de execucao (quando o usuario esta usando o app). Com TypeScript, o editor mostra o problema antes de voce salvar o arquivo.


E o JSDoc?

JSDoc e uma forma de adicionar tipos dentro de comentarios no JavaScript puro. Voce nao precisa de um compilador extra — o TypeScript Language Server (que roda dentro do VS Code) le esses comentarios e te da o mesmo IntelliSense.

// JSDoc — o arquivo continua sendo .js
/** @type {string} */
let nome = 'Svelte'

/** @type {number} */
let versao = 5

O resultado pratico e o mesmo: autocompletar, deteccao de erros, documentacao ao passar o mouse. A diferenca e que o codigo continua sendo JavaScript valido — nao precisa de compilacao.


O que o time Svelte pensa sobre isso?

Essa e uma das discussoes mais interessantes do ecossistema JavaScript. O proprio codigo-fonte do SvelteKit e escrito em JavaScript com JSDoc, nao em TypeScript.

Rich Harris, criador do Svelte, explicou a decisao:

A posicao do time Svelte

"SvelteKit e construido com JavaScript com checagem de tipos. Isso nos permite publicar o SvelteKit sem um passo de build. O pacote npm literalmente contem o diretorio source, e seus projetos usam isso diretamente."

"Esse padrao se provou otimo para nos — e o proximo Svelte major provavelmente vai seguir a mesma abordagem. Voce nao precisa de source maps. Nao ter que lidar com o compilador TypeScript pode ser libertador."

— Rich Harris, via discussao no Svelte Radio / Discord

Em resumo: para bibliotecas e ferramentas (como o proprio Svelte), JSDoc e atraente porque o codigo publicado no npm e o mesmo codigo-fonte, sem passo de build intermediario.

Mas entao o Svelte abandonou o TypeScript?
Nao. Essa e uma confusao comum. O time Svelte usa JSDoc no codigo-fonte do framework. Mas o Svelte suporta totalmente TypeScript nos projetos dos usuarios. Na verdade, o Svelte 5 melhorou significativamente a integracao com TypeScript — agora voce pode usar tipos diretamente no markup dos componentes .svelte, algo que antes nao era possivel.

A evolucao no Svelte 5

Simon Holthausen, membro do core team do Svelte, explicou na Svienna 2024 que uma das motivacoes dos Runes (novo sistema de reatividade do Svelte 5) foi justamente melhorar a compatibilidade com TypeScript:

Runes e TypeScript

No Svelte 3/4, a sintaxe $: double = count * 2 nao era entendida nativamente pelo TypeScript. O tooling precisava de hacks para fazer a checagem funcionar.

Com os Runes do Svelte 5, o TypeScript entende tudo nativamente. $state(), $derived() e $props() sao funcoes globais que o TypeScript reconhece sem nenhum hack.

Alem disso, o SvelteKit gera tipos automaticamente para cada rota do seu projeto. Voce nao precisa importar tipos manualmente — o editor ja sabe o formato dos seus dados de pagina, das form actions e de tudo mais.


Comparacao pratica

TypeScript
Arquivos usam extensao .ts
Componentes usam lang="ts"
Tipos declarados inline no codigo
Requer compilacao (TS → JS)
Ideal para: apps, projetos em equipe
JSDoc
Arquivos continuam .js
Tipos ficam em comentarios
Mesmo IntelliSense do TypeScript
Nao requer compilacao
Ideal para: bibliotecas, projetos solo

No Svelte, a diferenca fica assim:

Com TypeScript:

<script lang="ts">
  let nome: string = 'mundo'
  let contador: number = 0

  function incrementar(): void {
    contador++
  }
</script>

Com JSDoc:

<script>
  /** @type {string} */
  let nome = 'mundo'

  /** @type {number} */
  let contador = 0

  /** @returns {void} */
  function incrementar() {
    contador++
  }
</script>

Sem tipagem:

<script>
  let nome = 'mundo'
  let contador = 0

  function incrementar() {
    contador++
  }
</script>

Os tres funcionam. A diferenca esta no nivel de seguranca e ajuda que o editor oferece.


Voce pode combinar os dois

Uma abordagem poderosa e criar um arquivo types.d.ts dentro de src/lib/ com seus tipos em TypeScript puro e usa-los via JSDoc no resto do projeto:

// src/lib/types.d.ts
export interface Pessoa {
  nome: string
  idade: number
}
// qualquer arquivo .js do projeto
/** @type {import('$lib/types').Pessoa} */
const aluno = {
  nome: 'Ana',
  idade: 25
}

Isso te da o melhor dos dois mundos: tipos robustos onde importa, JavaScript puro onde voce quer simplicidade.

Dica
O SvelteKit ja faz algo parecido por voce. Para cada rota, ele gera automaticamente um arquivo $types com os tipos corretos. Voce nao precisa importar tipos para load, actions ou PageData — o editor ja sabe tudo.

E neste curso, o que vamos usar?

Neste curso, escolhemos TypeScript syntax no wizard do sv create. Os motivos:

1
O editor te ajuda mais
Autocompletar, deteccao de erros e documentacao ao passar o mouse funcionam de forma mais natural com TypeScript.
2
Svelte 5 tem suporte nativo
Os Runes foram projetados para funcionar perfeitamente com TypeScript. Nao ha mais hacks ou workarounds.
3
Mercado de trabalho
A maioria das vagas de frontend pede TypeScript. Aprender junto com Svelte e uma forma eficiente de dominar os dois.
4
Tipos basicos sao simples
Voce nao precisa ser expert em TypeScript. Saber usar string, number, boolean e interfaces basicas ja cobre 90% do uso diario.
E se eu nao sei TypeScript, vou me perder?
Nao. Os tipos que usaremos neste curso sao simples: string, number, boolean, arrays e objetos com interfaces. Quando algo mais avancado aparecer, explicaremos no momento. Alem disso, o TypeScript e gradual — voce pode usar any temporariamente em qualquer lugar e ir adicionando tipos conforme se sentir confortavel.

Resumo

OpcaoO que eQuando usar
TypeScript syntaxTipos no codigo, arquivos .tsApps, equipes, projetos de longo prazo
JSDoc commentsTipos em comentarios, arquivos .jsBibliotecas, prototipacao, projetos solo
Sem tipagemJavaScript puroAprendizado inicial, scripts rapidos
Combinar TS + JSDoc.d.ts para tipos, .js para codigoMelhor dos dois mundos

Conclusao do Modulo 1

Parabens! Voce completou o Modulo 1 — Primeiros Passos.

O que voce aprendeu

  • O que e Svelte e como ele se diferencia de outros frameworks
  • Como criar um projeto SvelteKit com pnpm dlx sv create
  • As opcoes do wizard: templates, TypeScript e add-ons
  • A estrutura completa de arquivos e pastas
  • Como o roteamento baseado em arquivos funciona
  • Os arquivos especiais do SvelteKit (+page, +layout, +server)
  • Por que usamos pnpm e como ele funciona
  • A relacao entre TypeScript, JSDoc e o ecossistema Svelte

Proximos passos

No proximo modulo, vamos mergulhar no Vite — o bundler que roda por baixo do SvelteKit. Entender o Vite vai te ajudar a compreender porque tudo e tao rapido e como otimizar seu ambiente de desenvolvimento.


Proximo modulo: Configurações e Vite