Description
Actuellement, le type narrowing de LeekScript fonctionne pour les vérifications inline (x != null, x instanceof Array, etc.), mais ne supporte pas les type guards : des fonctions dont le résultat booléen informe le compilateur sur le type d'un paramètre.
Exemple de syntaxe proposée
function isString(any x): x is string {
return typeOf(x) == TYPE_STRING
}
any value = "hello"
if (isString(value)) {
// Ici, value est narrowed à 'string'
debug(length(value)) // Pas d'alerte !
}
Pourquoi c'est utile
- Permet d'encapsuler des vérifications de type complexes dans des fonctions réutilisables
- Évite de dupliquer la logique de vérification à chaque
if
- C'est un pattern très utilisé dans TypeScript (
x is T) et Kotlin (contract { returns(true) implies (x is T) })
Implémentation envisagée
- Ajouter une syntaxe de retour de type guard sur les fonctions (ex:
function f(any x): x is Type { ... })
- Stocker l'information de type guard dans
FunctionBlock / FunctionType
- Dans
NarrowingInfo.extractInto(), quand la condition est un appel de fonction avec un type guard, extraire le narrowing correspondant sur l'argument
- Appliquer le narrowing dans les branches true/false comme pour les autres cas
Lien
Fait partie de l'amélioration du type narrowing — voir aussi le fichier d'exemples examples/narrowing.leek.
Description
Actuellement, le type narrowing de LeekScript fonctionne pour les vérifications inline (
x != null,x instanceof Array, etc.), mais ne supporte pas les type guards : des fonctions dont le résultat booléen informe le compilateur sur le type d'un paramètre.Exemple de syntaxe proposée
Pourquoi c'est utile
ifx is T) et Kotlin (contract { returns(true) implies (x is T) })Implémentation envisagée
function f(any x): x is Type { ... })FunctionBlock/FunctionTypeNarrowingInfo.extractInto(), quand la condition est un appel de fonction avec un type guard, extraire le narrowing correspondant sur l'argumentLien
Fait partie de l'amélioration du type narrowing — voir aussi le fichier d'exemples
examples/narrowing.leek.