LuaLS / LuaLS/lua-language-server
Support discriminated unions / type narrowing
Personne n'a encore pris cette issue.
- Langage dominant
- Lua
- Étoiles
- 4.4k
- Forks
- 442
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
In TypeScript this is supported by "narrowing"
Consider this example:
---@alias ChatAction { type: '"chat"', targetName: string, msg: string }
---@alias NotifyAction { type: '"notify"', msg: string, colour: number }
---@alias ActionType ChatAction | NotifyAction
---@param action ActionType
local function example(action)
-- action is any action (properties 'type', 'msg')
if (action.type == 'chat') then
-- action is ChatAction (properties 'type', 'msg', 'targetName')
end
if (action.type == 'notify') then
-- action is NotifyAction (properties 'type', 'msg', 'colour')
end
end
For a union type such as 'ActionType' in the example, the only defined properties should be those common to all types. After narrowing (through some sort of type check, in this case a type field) the additional properties in the narrowed subset are also available.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par l’exemple de ActionType de l’issue et consultez la documentation TypeScript liée sur le narrowing des types afin de définir le comportement attendu. Le travail est terminé lorsque les valeurs d’une union n’exposent que les propriétés communes avant une vérification de type, tandis que les vérifications du champ type exposent les propriétés de la variante d’action correspondante.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- lua, typescript
- Domaine
- devtools
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 25/100