Agora, o TypeScript foi lançado, é uma notícia emocionante para mim, mas como posso converter todos os arquivos JavaScript existentes em TypeScript?
Agora, o TypeScript foi lançado, é uma notícia emocionante para mim, mas como posso converter todos os arquivos JavaScript existentes em TypeScript?
Respostas:
Receio que isso seja muito problemático. TypeScript é um superconjunto de JavaScript . Isso implica que todo código JavaScript válido também é código TypeScript válido. O que está errado. O código a seguir está correto no JavaScript, mas cria um erro no TypeScript:
var data={x:5, y:6};
data.z=5;
Você pode obter o comportamento dinâmico do JavaScript declarando os dados como "ambiente"
var data:any={x:5, y:6};
data.z=5;
Agora isso também funcionará no TypeScript. No entanto, você pode alterar a extensão de um arquivo .js para .ts e passar esse arquivo para o compilador TypeScript. Isso realmente me confundiu e fiz a pergunta no canal de IRC do TypeScript no freenode. Aconteceu que o compilador Typescript verifica sua entrada quanto a JavaScript válido e simplesmente não faz nada caso encontre alguma coisa. Intuitivamente, isso parece bom. Você deve conseguir "converter" todo o seu JavaScript em Typescript apenas atualizando as extensões de arquivo e pronto. Infelizmente, isso não funciona conforme o esperado. Vamos supor que você tenha esse código:
var func=function(n){alert(n)};
var data={x:5};
data.z=6;
Edit: Eu apenas tentei compilar isso e não funciona. Sinto muito, parece que me enganei: o compilador TypeScript nem aceita JavaScript puro. Vou tentar descobrir o que deu errado.
Você alterou a extensão do arquivo para .ts e usa a função func no seu outro código. No começo, tudo parece bem, mas depois um erro feio aparece. Você decide que alguma verificação estática de tipo provavelmente o ajudaria e alterou o código para:
var func=function(n:string){alert(n)};
var data={x:5};
data.z=6;
Mas agora isso não é mais um código JavaScript válido e fará com que o compilador gere muitas mensagens de erro. Afinal, os dados não têm nenhum membro "z". ... Esse comportamento pode ser evitado se o tipo padrão sempre for "qualquer", mas a inferência de tipo for totalmente inútil.
Então, como você resolve esse problema? A resposta é: arquivos de declaração. Você pode usar o código JavaScript "como está" no projeto e ainda obter a verificação de tipo estático com a ajuda de alguns arquivos .d.ts. Eles informam ao compilador quais variáveis, métodos e "classes" são declaradas em um arquivo JavaScript, incluindo seus tipos. Portanto, eles permitem a verificação do tipo em tempo de compilação e um fantástico senso de senso. Um arquivo .d.ts para o meu exemplo seria
declare var data:any;
declare function func(n:string);
Salve isso como "myjsfile.d.ts" e importe-o para texto datilografado com
///<reference path="myjsfile.d.ts"/>
lembre-se de incluir o script JavaScript no seu arquivo html acima do texto datilografado compilado. Aqui está um link interessante . Você pode estar interessado na seção "Transformando JavaScript em TypeScript".
noEmitOnError
estiver desativado, ele ainda pode operar e emitir sua transpilação. Portanto, embora mostre erros (o que é perturbador), você pode realmente ignorá-los e usar a transpilação TypeScript apesar dela (permitindo, por exemplo, a transição gradual de JS para TS). Além disso, pelo menos alguns dos erros podem ser desativados por meio de switches como noImplicitAny
(talvez todos, embora o IDK).
Atualização: a ferramenta é descrita em detalhes nesta publicação
O ReSharper a partir da versão 9 ( compilações EAP disponíveis ) possui funcionalidade para converter automaticamente o código JavaScript em TypeScript. Você pode começar com a renomeação do arquivo .js em .ts e ver sugestões de R # como esta:
Não tentei em exemplos do mundo real. Mas é capaz de converter um grande número de padrões JavaScript.
Do terminal (mac):
for f in *.js; do mv $f `basename $f .js`.ts; done;
Renomeia todos os arquivos .js para .ts
Isso é um tanto irônico - mas, como Benjamin aponta acima, os arquivos JavaScript são TypeScript válidos . Se você deseja adicionar tipos, classes, interfaces, etc. ao seu JavaScript - você mesmo precisará criar e alterar seu código usando esses conceitos - há pouca / nenhuma conversão automática para isso.
Com o GNU findutils (a maioria dos * nixes) + Bash, basta:
find -type f -name '*.js' -exec bash -c 'mv "${1}" "${1%???}.ts"' bash {} \;
var a = 5; a = "";