O svelte agora tem um suporte documentado para typescript e se você não quer ficar de fora, criamos um fluxo de migração para sua biblioteca Svelte com typescript.
Caso você tenha seguido o tutorial para javascirpt, a migração será muito simples. Porém também sera possível entender o que é preciso migrar caso você tenha sua própria organização.
Para utilizar svelte com typescript é necessário instalar algumas novas dependências que para a transpilação do typescript e geração de suas declarações. Rode o comando abaixo e instale estas novas dependências.
yarn add -D @rollup/plugin-typescript svelte-preprocess tslib svelte-dts @tsconfig/svelte svelte-transpile-typescript typescript
Toda a base de configuração para construção do nosso projeto é através do rollup, e ele também é fundamental para utilizarmos o typescript com svelte.
Vamos então fazer as seguintes alterações nas nossas configurações do rollup.
// ...
import typescript from "@rollup/plugin-typescript";
import autoPreprocess from "svelte-preprocess";
import svelteDts from "svelte-dts";
// ...
export default [
{
// ...
plugins: [
svelte({
dev: !production,
css: (css) => css.write("bundle.css"),
preprocess: autoPreprocess(),
}),
// ...
typescript({ sourceMap: !production }),
// ...
],
},
{
// ...
plugins: [
svelte({ emitCss: false, preprocess: autoPreprocess() }),
typescript({ sourceMap: !production }),
// ...
],
},
{
// ...
plugins: [
svelteDts({ output: pkg.types }),
svelte({ emitCss: false, preprocess: autoPreprocess() }),
typescript({ sourceMap: !production }),
// ...
],
},
];
Neste código só consta as alterações necessárias baseadas na configuração do rollup para uma biblioteca svelte com javascript. Caso seu projeto não siga a configuração do outro tutorial, sugerimos que você faça um comparativo entre as configurações e veja o que é necessário para seu projeto.
Basicamente será necessário fazer 2 ajustes no package.json para realizar a transpilação do typescript de um componente svelte e informar o nosso arquivo com declarações typescript.
Ao utilizar bibliotecas externas com svelte, o mesmo procura pelo atributo svelte
do package.json
para realizar contruções mais precisas. No outro tutorial nós fazemos essa configuração colocando a referência para o nosso componente Svelte puro.
Porém, caso nosso componente seja escrito em typescript, as aplicações iriam ser obrigadas a utilizar typescript, pois as mesmas não teriam as configurações necessárias para transpilar o componente puro.
Para que nosso componente escrito em typescript tenha suporte para javascript, vamos precisar transpilar o componente utilizando a biblioteca svelte-transpile-typescript. Faça as seguintes alterações no package.json
:
{
// ...
"svelte": "dist/FacebookLogin.svelte",
// ...
"scripts": {
// ...
"build": "rollup -c && svelte-transpile-typescript -i src/lib/ErrorScreen.svelte -o dist/ErrorScreen.svelte"
}
// ...
}
Remova também o src/lib/ErrorScreen.svelte
do atributo files
.
{
// ...
"files": ["dist", "README.md"]
// ...
}
Porém ao fazer somente esse procedimento acima você está perdendo todo o poder dado pelo typescript, e projetos typescript não poderão usufluir das vantagens. Para que isso não aconteça vamos gerar as declarações de typescript da nossa biblioteca.
Já foi instalado o pacote svelte-dts
e configurado no rollup para gerar as declarações da biblioteca svelte, este pacote vai cuidar de todo esse contexto. A única configuração necessária que iremos fazer é modificar o package.json
inserindo o atributo types
. Veja abaixo.
{
// ...
"types": "dist/index.d.ts"
// ...
}
Na nossa biblioteca de exemplo vamos só precisar alterar o conteúdo da tag script
, identificando que seu conteúdo é typescript e colocando os tipos nas propriedades.
<!-- ... -->
<script lang="ts">
export let error: number | undefined;
export let description: string | undefined;
</script>
<!-- ... -->
Essa é a parte mais simples, precisamos renomear o arquivo doc/main.js
para doc/main.ts
. Use o seguinte comando:
mv ./doc/main.js ./doc/main.ts
E se sentir interesse, pode editar o exemplo de doc/App.svelte
para typescript.
Execute o comando abaixo na raiz do projeto.
yarn dev
Acesse http://localhost:5000/
e verá seu componente. Após isso, execute o comando abaixo na raiz do projeto.
yarn build
No diretório dist
que está na raiz do seu projeto, você verá seu componente transpilado.
Publique está nova versão da biblioteca e teste em outros projetos, caso tenha dúvida de como publicar acesse o tutorial inicial.