Maintenant, TypeScript est sorti, c'est une nouvelle passionnante pour moi, mais comment puis-je convertir tous les fichiers JavaScript existants en TypeScript.
Maintenant, TypeScript est sorti, c'est une nouvelle passionnante pour moi, mais comment puis-je convertir tous les fichiers JavaScript existants en TypeScript.
Réponses:
Je crains que ce ne soit très problématique. TypeScript est un sur-ensemble de JavaScript . Cela implique que tout code JavaScript valide est également du code TypeScript valide. Ce qui est tout simplement faux. Le code suivant est correct en JavaScript, mais crée une erreur dans TypeScript:
var data={x:5, y:6};
data.z=5;
Vous pouvez obtenir le comportement dynamique de JavaScript en déclarant les données comme «ambiantes»
var data:any={x:5, y:6};
data.z=5;
Maintenant, cela fonctionnera également dans TypeScript. Néanmoins, vous pouvez changer l'extension d'un fichier .js en .ts et transmettre ce fichier au compilateur TypeScript. Cela m'a vraiment dérouté et j'ai posé la question dans le canal IRC TypeScript sur freenode. Il s'est avéré que le compilateur Typescript vérifie son entrée pour du JavaScript valide et ne fait rien au cas où il trouverait quelque chose. Intuitivement, cela sonne bien. Vous devriez pouvoir «convertir» tout votre JavaScript en Typescript en mettant simplement à jour les extensions de fichier et être prêt à partir. Malheureusement, cela ne fonctionne pas comme prévu. Supposons que vous ayez ce code:
var func=function(n){alert(n)};
var data={x:5};
data.z=6;
Edit: Je viens d'essayer de compiler ceci et cela ne fonctionne pas. Je suis désolé, je semble m'être trompé: le compilateur TypeScript n'accepte même pas le JavaScript pur. Je vais essayer de découvrir ce qui ne va pas.
Vous avez changé l'extension de fichier en .ts et utilisez la fonction func dans votre autre code. Au début, tout semble aller bien, mais un vilain bogue apparaît. Vous décidez qu'une vérification de type statique vous aiderait probablement et vous changez le code en:
var func=function(n:string){alert(n)};
var data={x:5};
data.z=6;
Mais maintenant, ce n'est plus du code JavaScript valide et le compilateur générera de nombreux messages d'erreur. Après toutes les données n'ont pas de membre "z". ... Ce comportement pourrait être évité si le type par défaut était toujours "any" mais l'inférence de type serait alors totalement inutile.
Alors, comment résolvez-vous ce problème? La réponse est: les fichiers de déclaration. Vous pouvez utiliser votre code JavaScript "tel quel" dans le projet et toujours obtenir une vérification de type statique à l'aide de quelques fichiers .d.ts. Ils informent le compilateur des variables, méthodes et «classes» déclarées dans un fichier JavaScript, y compris leurs types. Par conséquent, ils permettent une vérification de type à la compilation et une intelligence fantastique. Un fichier .d.ts pour mon exemple serait
declare var data:any;
declare function func(n:string);
Enregistrez-le sous "myjsfile.d.ts" et importez-le dans un texte dactylographié avec
///<reference path="myjsfile.d.ts"/>
assurez-vous d'inclure le script JavaScript dans votre fichier html au-dessus du script dactylographié compilé. Voici un lien intéressant . Vous pourriez être intéressé par la section "Transformer JavaScript en TypeScript".
noEmitOnErrorest éteint, il est toujours capable d'opérer et d'émettre sa transpilation. Ainsi, s'il affiche des erreurs (ce qui est dérangeant), vous pouvez en fait ignorer ces erreurs et utiliser la transpilation TypeScript malgré cela (permettant, par exemple, une transition progressive de JS à TS). En outre, au moins certaines des erreurs peuvent être désactivées via des commutateurs comme noImplicitAny(peut-être tous, bien que IDK).
Mise à jour: l' outil est décrit en détails dans cet article
ReSharper à partir de la version 9 ( versions EAP disponibles ) a une fonctionnalité pour convertir automatiquement le code JavaScript en TypeScript. Vous pouvez commencer par renommer le fichier .js en .ts et voir des suggestions R # comme celle-ci:

Je ne l'ai pas essayé sur des exemples du monde réel. Mais il est capable de convertir un grand nombre de modèles JavaScript.
Depuis le terminal (mac):
for f in *.js; do mv $f `basename $f .js`.ts; done;
Renomme tous les fichiers .js en .ts
C'est un peu ironique - mais comme Benjamin le souligne ci-dessus, les fichiers JavaScript sont du TypeScript valide . Si vous souhaitez ajouter des types, des classes, des interfaces, etc. à votre JavaScript - vous devrez vous-même concevoir et modifier votre code en utilisant ces concepts - il y a peu ou pas de conversion automatique pour cela.
Avec GNU findutils (la plupart des * nixes) + Bash, faites simplement:
find -type f -name '*.js' -exec bash -c 'mv "${1}" "${1%???}.ts"' bash {} \;
var a = 5; a = "";