Qu'est-ce que Tapuscrit et pourquoi devrais-je utiliser à la place de JavaScript?[fermé]

StackOverflow https://stackoverflow.com//questions/12694530

  •  12-12-2019
  •  | 
  •  

Question

Pouvez-vous nous décrire ce que le Tapuscrit de la langue est?

Que peut-il faire que du JavaScript ou des bibliothèques ne peut pas le faire, cela me donnerait raison de le considérer?

Était-ce utile?

La solution

j'ai écrit à l'origine cette réponse lorsque le type dactylography était toujours Hot-Off-Presses. Cinq ans plus tard, c'est une vue d'ensemble, mais regardez chez La réponse de Lodewijk ci-dessous pour plus de profondeur

Vue 1000ft ...

TypeScript est un superset de JavaScript qui fournit principalement la typage, les classes et les interfaces statiques optionnels. L'un des grands avantages consiste à permettre aux IDES de fournir un environnement plus riche pour repérer des erreurs communes comme vous tapez le code .

Pour avoir une idée de ce que je veux dire, observez Vidéo d'introduction de Microsoft sur la langue.

Pour un grand projet JavaScript, adopter dactylography peut entraîner un logiciel plus robuste, tout en étant déployé lorsqu'une application JavaScript régulière serait exécutée.

Il est open source, mais vous obtenez uniquement l'intellisense intelligent que vous tapez si vous utilisez un IDE pris en charge. Initialement, il s'agissait uniquement de Microsoft Visual Studio (également noté dans Blog Post de Miguel de Icaza ). Ces jours-ci, D'autres IDes offrent un support documentaire TOO .

Y a-t-il d'autres technologies comme elle?

Il y a Coffeescript , mais cela sert vraiment un but différent. IMHO, Coffeescript fournit une lisibilité des humains, mais Thypscript offre également une lisibilité approfondie des outils via sa saisie statique en option (voir ceci Poste de blog récent pour un peu plus de critique). Il y a aussi dart mais c'est un remplacement complet pour JavaScript (bien que ce soit peut produire un code JavaScript ) < / p>

Exemple

À titre d'exemple, voici quelques documents (vous pouvez jouer avec cela dans le Type de jeux de type )

class Greeter {
    greeting: string;
    constructor (message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}  

Et voici le JavaScript, il produirait

var Greeter = (function () {
    function Greeter(message) {
        this.greeting = message;
    }
    Greeter.prototype.greet = function () {
        return "Hello, " + this.greeting;
    };
    return Greeter;
})();

Notez comment le type dossier définit le type de variables de membre et paramètres de la méthode de classe. Ceci est supprimé lors de la traduction de JavaScript, mais utilisée par l'IDE et le compilateur pour repérer des erreurs, comme passer un type numérique au constructeur.

Il est également capable de déduire des types qui ne sont pas explicitement déclarés, par exemple, il déterminerait que la méthode greet() renvoie une chaîne.

Documents de débogageScript

De nombreux navigateurs et IDes offrent un soutien de débogage direct à travers des sources. Voir cette question de dépassement de la pile pour plus de détails: Documents de débogageSite avec Visual Studio < / p>

Vous voulez en savoir plus?

J'ai écrit à l'origine cette réponse lorsque le type dactylographe était toujours à chaud-la-presse. Découvrez Réponse de Lodewijk à cette question pour plus de détails actuels.

Autres conseils

Tapuscrit du rapport à JavaScript

Tapuscrit est tapé un sur-ensemble de JavaScript qui compile à la plaine de JavaScript - typescriptlang.org.

JavaScript est un langage de programmation développé par L'association du Comité Technique 39, qui est un groupe de personnes composé de beaucoup de différentes parties prenantes.TC39 est un comité organisé par ECMA:une des normes internes de l'organisation.JavaScript a différentes mises en œuvre par de nombreux fournisseurs différents (par ex.Google, Microsoft, Oracle, etc.).L'objectif de JavaScript est la lingua franca du web.

Tapuscrit est un sur-ensemble du langage JavaScript qui a un seul open-source du compilateur et de l'est développée essentiellement par un seul fournisseur de:Microsoft.L'objectif de la Machine est de les aider à attraper les erreurs plus tôt par le biais d'un type de système et de le rendre JavaScript développement plus efficace.

Essentiellement Tapuscrit atteint ses buts en trois façons:

  1. Support moderne pour les fonctions JavaScript - Le langage JavaScript (pas le moteur d'exécution) est normalisé par le biais de la ECMAScript des normes.Pas tous les navigateurs et JavaScript temps de fonctionnement en charge toutes les fonctionnalités de tous les ECMAScript normes (voir ce vue d'ensemble).La machine permet l'utilisation de la plupart des dernières ECMAScript caractéristiques et les traduit pour les plus âgés ECMAScript cibles de votre choix (voir la liste des cibles de compilation en vertu de la --target option de compilation).Cela signifie que vous pouvez utiliser en toute sécurité de nouvelles fonctionnalités, comme les modules, les lambda fonctions, des classes, la propagation de l'opérateur et de déstructuration, tout en restant compatible avec les anciens navigateurs et JavaScript runtimes.

  2. Avancé type de système - Le type de soutien ne fait pas partie du standard ECMAScript et ne sera probablement jamais être en raison de l'interpréter la nature au lieu de compilé nature de JavaScript.Le type de système de fichier d'enregistrement est incroyablement riche et comprend:les interfaces, les énumérations, les types d'hybrides, de génériques, de l'union/intersection types de modificateurs d'accès et beaucoup plus.L' site officiel de la Machine donne un aperçu de ces fonctions.Tapuscrit du type de système est sur pied d'égalité avec la plupart des autres langages à typage et, dans certains cas, sans doute plus puissant.

  3. Développeur soutien de l'outillage - Tapuscrit du compilateur peut exécuter en tant que processus d'arrière-plan à l'appui des deux différentiels de compilation et d'intégration EDI, tels que vous pouvez facilement naviguer, identifier les problèmes, de les inspecter et de possibilités de refactoriser votre base de code.

Tapuscrit rapport à d'autres JavaScript ciblage langues

La machine a une philosophie unique par rapport à d'autres langues que les compiler en JavaScript.Le code JavaScript est valable Tapuscrit code;Tapuscrit est un sur-ensemble de JavaScript.Vous pouvez presque le renommer votre .js les fichiers de .ts fichiers et commencer à utiliser la Machine (voir "JavaScript interopérabilité" ci-dessous).Tapuscrit, les fichiers sont compilés lisible JavaScript, ainsi que la migration de retour est possible et la compréhension de l'compilé Tapuscrit est pas difficile du tout.Tapuscrit s'appuie sur le succès de JavaScript tout en améliorant ses faiblesses.

D'une part, vous avez l'avenir des outils qui prennent moderne ECMAScript normes et de les compiler vers le bas pour les anciennes versions de JavaScript avec Babel étant la plus populaire.D'autre part, vous avez des langues qui peut totalement différer de JavaScript qui cible JavaScript, comme CoffeeScript, Clojure, Dart, de l'Orme, Haxe, Scala.js et une foule d'autres (voir ce liste).Ces langues, même si elles pourraient être mieux que si JavaScript est l'avenir pourra jamais conduire, courir un plus grand risque de ne pas trouver assez d'adoption pour leur avenir, pour être garanti.Vous pourriez aussi avoir plus de mal à trouver des développeurs expérimentés pour certaines de ces langues, même si ceux que vous trouverez peut souvent être plus enthousiaste.L'interopérabilité avec du JavaScript peut aussi être un peu plus compliqué, car ils sont plus éloignés de ce que JavaScript est réellement.

La machine se trouve entre ces deux extrêmes, équilibrant ainsi le risque.Tapuscrit est pas un choix risqué par aucune norme.Il prend très peu d'efforts pour s'habituer à si vous êtes familier avec le JavaScript, car il n'est pas une langue entièrement différente, a d'excellentes JavaScript interopérabilité de soutien et il a vu beaucoup de l'adoption récemment.

Optionnellement, le typage statique et l'inférence de type

JavaScript est typées dynamiquement.Cela signifie que le JavaScript ne sais pas quel est le type d'une variable est jusqu'à ce qu'il est réellement instanciée au moment de l'exécution.Cela signifie également qu'il peut être trop tard.Tapuscrit ajoute le support de type JavaScript.Des Bugs qui sont causées par des suppositions erronées de certains variable d'un certain type peut être complètement éradiquée si vous jouez vos cartes de droite (comment strict que vous tapez votre code, ou si vous tapez votre code à tout, c'est à vous de voir).

La machine permet de taper un peu plus facile et beaucoup moins explicite par l'utilisation de l'inférence de type.Par exemple: var x = "hello" dans le fichier d'enregistrement est la même que var x : string = "hello".Le type est tout simplement déduit de son utilisation.Même si vous n'avez pas explicitement type les types, ils sont toujours là pour vous sauver de faire quelque chose qui, sinon, seraient le résultat d'une erreur d'exécution.

Tapuscrit est éventuellement tapé par défaut.Par exemple function divideByTwo(x) { return x / 2 } est une fonction valide à la Machine qui peut être appelé tout type de paramètre, même si l'appelant à une chaîne de caractères sera bien évidemment le résultat dans un runtime erreur.Tout comme vous avez l'habitude d'en JavaScript.Cela fonctionne, parce que quand aucun type a été attribuée de manière explicite et le type ne peut pas être déduit, comme dans le divideByTwo exemple, Tapuscrit sera implicitement affecter le type any.Cela signifie que le divideByTwo fonction du type de signature devient automatiquement function divideByTwo(x : any) : any.Il existe un compilateur drapeau à interdire ce comportement: --noImplicitAny.L'activation de ce pavillon vous donne un plus grand degré de sécurité, mais aussi signifie que vous aurez à faire plus de la frappe.

Les Types ont un coût associé.Tout d'abord, il y a une courbe d'apprentissage, et le deuxième de tous, bien sûr, il vous en coûtera un peu plus de temps pour mettre en place une base de code en utilisant la bonne typage strict trop.Dans mon expérience, ces coûts sont en vaut la peine sur le sérieux de la base de code est de partager avec les autres. Une Étude à Grande Échelle des Langages de Programmation et de la Qualité du Code sur Github suggère que "les langages statiquement typés, en général, sont moins défaut enclins que la dynamique, et que le typage fort est mieux que la faiblesse de frappe dans la même optique".

Il est intéressant de noter que ce même article conclut que la Machine est moins sujette à erreur de JavaScript:

Pour ceux avec des coefficients positifs on peut s'attendre à ce que la langue est associé avec, toutes choses égales par ailleurs, un plus grand nombre de défaut de bugs.Ces langues sont C, C++, JavaScript, Objective-C, Php, et Python.Les langues Clojure, Haskell, Ruby, Scala, et Tapuscrit, tous ont des coefficients négatifs ce qui implique que ces langues sont moins susceptibles que la moyenne d'entraîner un défaut de fixation s'engage.

Enhanced IDE de soutien

L'expérience de développement avec Tapuscrit est une grande amélioration par rapport à JavaScript.L'IDE est informé en temps réel par le Tapuscrit compilateur sur sa riche d'informations de type.Cela donne un couple de grands avantages.Par exemple, avec la Machine, vous pouvez faire en toute sécurité refactorings comme renomme l'ensemble de votre base de code.Grâce à la complétion de code, vous pouvez obtenir de l'aide en ligne sur les fonctions d'une bibliothèque peut offrir.Plus besoin de les retenir ou de les regarder dans les références en ligne.Les erreurs de Compilation sont rapportés directement dans l'IDE avec un rouge ligne sinueuse pendant que vous êtes occupés de codage.Dans l'ensemble, ce qui permet un important gain de productivité par rapport à l'utilisation de JavaScript.On peut passer plus de temps à coder et moins de temps de débogage.

Il existe une large gamme de IDEs qui ont un excellent support pour le Tapuscrit, comme le Code de Visual Studio, WebStorm, Atom et Sublime.

Stricte null vérifie

Les erreurs d'exécution de la forme cannot read property 'x' of undefined ou undefined is not a function sont très souvent causés par des bugs dans le code JavaScript.Hors de la zone de texte dactylographié déjà réduit la probabilité de ces types d'erreurs, car on ne peut pas utiliser une variable qui n'est pas connu pour le Tapuscrit compilateur (à l'exception des propriétés de any les variables de type).Il est possible cependant, à tort, d'utiliser une variable qui est définie à undefined.Cependant, avec la version 2.0 de la Machine, vous pouvez éliminer ces types d'erreurs, tous ensemble, à travers l'utilisation de la non-types nullables.Cela fonctionne comme suit:

Avec la stricte null vérifie activé (--strictNullChecks compilateur drapeau) le Tapuscrit compilateur ne permettra pas undefined pour être affectée à une variable, sauf si vous explicitement déclarer qu'il soit de type nullable.Par exemple, let x : number = undefined le résultat sera une erreur de compilation.Cela cadre parfaitement avec le type de théorie, puisque undefined n'est pas un nombre.On peut définir x pour être un type somme de number et undefined pour corriger cela: let x : number | undefined = undefined.

Une fois qu'un type est connu pour être nullable, c'est à dire d'un type qui peut être aussi de la valeur null ou undefined, le Tapuscrit compilateur peut déterminer, à l'aide de flux de contrôle en fonction du type d'analyse à savoir si ou non votre code peut utiliser en toute sécurité une variable ou pas.En d'autres termes lorsque vous vérifiez une variable est undefined par exemple pour une if déclaration du Manuscrit compilateur déduit que le type dans la branche de votre code de contrôle de flux n'est plus nullable et, par conséquent, peuvent être utilisés sans risque.Voici un exemple simple:

let x: number | undefined;
if (x !== undefined) x += 1; // this line will compile, because x is checked.
x += 1; // this line will fail compilation, because x might be undefined.

Au cours de la construire des, à 2016 de la conférence co-concepteur de la Machine Anders Hejlsberg a donné une explication détaillée et la démonstration de cette fonctionnalité: vidéo (de 44:30 à 56:30).

Compilation

Pour utiliser la Machine vous avez besoin d'un processus de construction de compiler du code JavaScript.Le processus de génération prend généralement que quelques secondes en fonction bien sûr de la taille de votre projet.Le Tapuscrit compilateur prend en charge compilation incrémentielle (--watch compilateur drapeau), de sorte que toute modification ultérieure peut être compilé à plus grande vitesse.

Le Tapuscrit compilateur peut inline carte source d'information dans le générés .js fichiers ou créer des .les fichiers de mappage.Source des informations sur la carte peut être utilisée par les utilitaires de débogage comme le Chrome DevTools et d'autres IDE est de relier les lignes de JavaScript pour celles qui les a générées dans le fichier d'enregistrement.Cela rend possible pour vous de définir des points d'arrêt et d'inspecter les variables en cours d'exécution directement sur votre Tapuscrit code.Source des informations sur la carte fonctionne très bien, c'était longtemps avant de la Machine, mais le débogage Tapuscrit est généralement pas aussi grande que lors de l'utilisation de JavaScript directement.Prendre la this mot-clé par exemple.En raison de la modification de la sémantique de l' this mot-clé autour de fermetures depuis ES2015, this peut existe réellement en cours d'exécution comme une variable appelée _this (voir cette réponse).Cela peut vous confondre pendant le débogage, mais n'est généralement pas un problème si vous savez à ce sujet ou d'inspecter le code JavaScript.Il convient de noter que Babel souffre exactement le même type de problème.

Il y a quelques autres trucs du Manuscrit compilateur peut faire, comme la génération de l'interception de code sur la base de les décorateurs, la génération de chargement du module de code pour les différents systèmes de modules et d'analyse JSX.Cependant, vous aurez probablement besoin d'un outil de construction en outre le Tapuscrit du compilateur.Par exemple, si vous souhaitez compresser votre code, vous devrez ajouter d'autres outils à votre processus de génération de le faire.

Il y a la Machine de compilation des plugins disponibles pour Webpack, Gulp, Grunt et à peu près tout les autres JavaScript outil de construction là-bas.Le Tapuscrit de la documentation a une section sur intégration avec les outils de construction la couverture d'eux tous.Un linter est également disponible dans le cas où vous souhaitez encore plus de temps de construction de la vérification.Il y a aussi un grand nombre de projets de semences qui vous permettra de commencer avec Tapuscrit en combinaison avec un tas d'autres technologies comme Angulaire 2, de Réagir, de Braise, SystemJS, Webpack, Gulp, etc.

JavaScript interopérabilité

Depuis le Tapuscrit est si étroitement lié à JavaScript, il a de grandes capacités d'interopérabilité, mais un travail supplémentaire est nécessaire de travailler avec les bibliothèques JavaScript en caractères d'imprimerie. Tapuscrit définitions sont nécessaires pour que le Tapuscrit compilateur comprend que les appels de fonction comme _.groupBy ou angular.copy ou $.fadeOut ne sont pas en fait illégal consolidés.Les définitions de ces fonctions sont placées dans .d.ts les fichiers.

La forme la plus simple définition peut prendre est de permettre à un identificateur à être utilisés en aucune façon.Par exemple, lors de l'utilisation de Lodash, une seule ligne du fichier de définition de declare var _ : any vous permettra d'appeler toute fonction que vous voulez sur _, mais alors, bien sûr, vous êtes également toujours en mesure de faire des erreurs: _.foobar() légale Tapuscrit d'appel, mais il est, bien sûr, un appel illégal au moment de l'exécution.Si vous voulez le bon type de soutien et de complétion de code de votre fichier de définition de besoins pour être plus exact (voir lodash définitions pour un exemple).

Les modules Npm qui sont pré-emballé avec leurs propres définitions de type sont automatiquement comprises par le Tapuscrit compilateur (voir la documentation).Pour à peu près toutes les autres semi-populaire bibliothèque JavaScript qui n'a pas son propre définitions quelqu'un a déjà fait des définitions de type de disposition par un autre module npm.Ces modules sont préfixés par "@types de/" et provient d'un dépôt Github appelé DefinitelyTyped.

Il y a une mise en garde:les définitions de type doit correspondre à la version de la bibliothèque que vous utilisez au moment de l'exécution.S'ils ne le font pas, la Machine peut vous interdire d'appeler une fonction ou d'une référence à une variable qui existe ou qui vous permettent d'appeler une fonction ou de déréférencer une variable qui n'existe pas, tout simplement parce que les types ne correspondent pas au moment de l'exécution au moment de la compilation.Donc, assurez-vous de charger la bonne version des définitions de type de la bonne version de la bibliothèque que vous utilisez.

Pour être honnête, il y a un léger soucis pour cela et il est peut-être l'une des raisons pour lesquelles vous ne choisissez pas la Machine, mais plutôt aller pour quelque chose comme Babel qui ne souffrent pas d'avoir à trouver des définitions de type à tous.D'autre part, si vous savez ce que vous faites, vous pouvez facilement surmonter toute sorte de problèmes causés par des erreurs ou manquants fichiers de définition.

La conversion à partir de JavaScript pour le Tapuscrit

Tout .js le fichier peut être renommé à un .ts fichier et a couru à travers le Tapuscrit compilateur pour obtenir un point de vue syntaxique le même code JavaScript comme une sortie (si elle est syntaxiquement correcte en premier lieu).Même lorsque le Tapuscrit compilateur obtient des erreurs de compilation, il sera toujours produire un .js fichier.Il peut même accepter .js les fichiers en entrée avec de la --allowJs le drapeau.Cela vous permet de démarrer avec la Machine immédiatement.Malheureusement, des erreurs de compilation sont susceptibles de se produire au début.On n'a besoin de se rappeler que ce ne sont pas de show-arrêt des erreurs comme vous peut être utilisé avec d'autres compilateurs.

Les erreurs de compilation, on obtient dans le début lors de la conversion d'un projet JavaScript à un Tapuscrit projet sont inévitables Tapuscrit de la nature.La machine vérifie tous code pour la validité et donc il a besoin de savoir à propos de toutes les fonctions et les variables utilisées.Ainsi, les définitions de types doivent être en place pour chacun d'eux, sinon des erreurs de compilation sont tenus de se produire.Comme mentionné dans le chapitre ci-dessus, pour pratiquement n'importe quel framework JavaScript il y a .d.ts les fichiers qui peuvent être facilement acquis avec l'installation de DefinitelyTyped paquets.Cependant, il serait peut-être que vous avez utilisé une partie obscure de la bibliothèque pour laquelle aucun texte dactylographié définitions sont disponibles ou que vous avez polyfilled JavaScript primitives.Dans ce cas, vous devez fournir des définitions de type de ces bits pour les erreurs de compilation à disparaître.Il suffit de créer un .d.ts fichier et de les inclure dans le tsconfig.json est files tableau, de sorte qu'il est toujours considéré par le Tapuscrit du compilateur.Dans il déclarer ces éléments que la Machine ne sait pas sur que le type any.Une fois que vous avez éliminé toutes les erreurs, vous pouvez introduire progressivement à taper pour les parties en fonction de vos besoins.

Certains travaux sur la (re)configuration de votre build pipeline sera également nécessaire pour obtenir la Machine dans la construction de pipelines.Comme mentionné dans le chapitre sur la compilation il ya beaucoup de bonnes ressources là-bas et je vous encourage à regarder pour les semences de projets qui utilisent la combinaison d'outils que vous voulez travailler avec.

Le plus grand obstacle est la courbe d'apprentissage.Je vous encourage à jouer avec un petit projet à première.Regardez comment il fonctionne, comment il construit, les fichiers qu'il utilise, comment il est configuré, comment il fonctionne dans votre IDE, comment il est structuré, les outils qu'elle utilise, etc.La conversion d'une grande base de code JavaScript à Tapuscrit est faisable que si vous savez ce que vous faites.Lire ce blog par exemple sur la conversion de 600k lignes de texte dactylographié dans les 72 heures).Assurez-vous d'avoir une bonne maîtrise de la langue avant de faire le saut.

Adoption

Tapuscrit est open-source (sous licence Apache 2, voir GitHub) et soutenu par Microsoft. Anders Hejlsberg, l'architecte en chef de C# est le fer de lance du projet.C'est très active au projet;le Tapuscrit de l'équipe a été la libération d'un lot de nouvelles fonctionnalités dans les dernières années, et beaucoup de grands sont toujours à venir (voir la feuille de route).

Quelques faits au sujet de l'adoption et de la popularité:

  • Dans le 2017 StackOverflow développeur de l'enquête Tapuscrit a été le plus populaire JavaScript transpiler (9e place au classement général) et a remporté la troisième place dans le plus aimé de programmation de catégorie a de langue.
  • Dans le 2018 etat de la js enquête Tapuscrit a été déclaré comme l'un des deux grands gagnants dans le code JavaScript, des saveurs de la catégorie (avec ES6 étant l'autre).
  • Dans le 2019 StackOverlow deverloper enquête Tapuscrit de la rose à la 9e place de la plupart des langues populaires parmi les développeurs professionnels, dépassant à la fois le C et le C++.De nouveau a pris la troisième place chez la plupart, le plus aimé des langues.

DocumentsScript fait quelque chose de similaire à ce que fait moins ou sass pour CSS.Ce sont des super ensembles de celui-ci, ce qui signifie que chaque code JS que vous écrivez est un code dossier valide.De plus, vous pouvez utiliser les autres friandises qu'il ajoute à la langue et le code transpilé sera valide JS.Vous pouvez même définir la version JS que vous souhaitez votre code obtenu.

Actuellement documentscript est un super jeu de ES2015, vous pourriez donc être un bon choix pour commencer à apprendre les nouvelles fonctionnalités JS et transpile à la norme requise pour votre projet.

" Doctuscriptions " - un cours vidéo pluralsight par Dan Wahlin et John Papa est un très bon, actuellement (25 mars 2016) mis à jour pour refléter TypeScript 1.8, Introduction à Typescript.

Pour moi, les très bonnes fonctionnalités, à côté des belles possibilités d'intellisense, sont les classes , interfaces , modules , la facilité de mise en œuvreAMD et la possibilité d'utiliser le débogueur Type de studio Visual Studio lorsqu'ils sont invoqués avec IE.

à résumer : si utilisé comme prévu comme prévu, Thypscript peut rendre la programmation JavaScript plus fiable et plus facile.Il peut augmenter considérablement la productivité du programmeur JavaScript sur le SDLC complet.

script ECMA 5 (ES5) que tout le navigateur prend en charge et précompilé.ES6 / ES2015 et ES / 2016 sont venus cette année avec beaucoup de changements afin de contempler ces changements là-bas, il y a quelque chose qui devrait prendre des soins à propos de tort dossier.

• Typescript est Types -> signifie que nous devons définir le type de données de chaque propriété et de chaque méthode.Si vous connaissez C #, Thypscript est facile à comprendre.

• Un grand avantage de Thypscript est que nous sommes des problèmes liés au début avant d'aller à la production.Cela permet aux tests d'unités d'échec s'il y a une inadéquation de type.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top