Je viens de JavaScript

Si vous avez écrit du TypeScript, les annotations vous sembleront familières — mais elles ne sont pas effacées : elles compilent en dispositions mémoire et en code natif. Et les surprises que garde JavaScript ont disparu : une seule égalité, pas de coercition, pas d'undefined, pas de this qui change de sens selon l'appel.

ConceptJavaScriptKeal
Liaisonconst x = 1val x = 1
Mutablelet x = 1var x = 1
Fonctionfunction add(a, b) { return a + b }func add(a: Int, b: Int): Int { a + b }
Flèchexs.map(x => x * 2)xs.map({ it * 2 })
Tableau[1, 2][1, 2]
Objet / Mapnew Map([["a", 1]]){"a": 1}
Littéral gabarit`hello ${name}`"hello ${name}"
Test de nullitéx ?? "d"x ?: "d"
Chaînage optionnelx?.lengthx?.length
Classeclass C { constructor(n) { } }class C(var n: Int)
Promiseawait f()actors: spawn / send / run

Ce qui vous surprendra

Une seule égalité, sans coercition

== compare des valeurs de même type ; il n'y a pas de === parce qu'il n'y a rien dont le distinguer. "1" + 1 ne devient pas silencieusement une chaîne — bien que "n = " + n soit permis et rende la valeur.

null existe, undefined non

Une seule valeur absente, dans le type ou pas du tout. Une clé de map absente donne null, et le vérificateur vous oblige à la traiter.

this est lexical et toujours l'objet

Dans une méthode, this est l'instance. Il ne peut être relié, perdu dans un callback, ni masqué par une fonction fléchée.

Cela compile en binaire

Il n'y a ni bundler ni runtime à livrer : keal build émet du C11 et le confie à un compilateur C.