Dire que j'ai la chaîne constante suivante:types de flux avec chaînes constantes et types dépendants
export default const FOO = 'FOO'
dire que j'importer ceci dans un fichier annoté de flux comme ceci:
import FOO from '../consts/Foo'
J'ai alors une fonction:
const example = (foo : string) : {| type: FOO, foo: string |} => {
return {type: FOO, foo: foo}
}
Cela ne Typecheck pas:
6: const example = (foo : string) : {| type: FOO, foo: string |}=> {
^^^^^^^^^^^^^^ string. Ineligible value used in/as type annotation (did you forget 'typeof'?)
6: const example = (foo : string) : {| type: FOO, foo: string |}=> {
^^^^^^^^^^^^^^ FOO
Mes questions sont les suivantes:
1) est-il possible d'utiliser des constantes dans les types de flux, comment puis-je reproduire ce comportement?
2) Est-il possible de faire des types dépendants dans le flux? Ainsi, par exemple, pourrais-je encoder, à travers les types, que la chaîne qui est retournée doit être la même que celle qui est passée dans la fonction example
?
EDIT: clarification à la partie 2: Est-il possible de d'une certaine façon d'indiquer que le paramètre foo
passé dans la fonction example
est en fait la même chaîne que la chaîne à la clé foo
dans l'objet de retour? Ou pour affirmer que l'entrée et la sortie ont la même longueur (par exemple une fonction de chiffrement par décalage). Ou dire contenir une permutation des mêmes caractères? (pour un shuffle).
https://en.wikipedia.org/wiki/Dependent_type
Si vous voulez que FOO ait le type FOO, vous devez le déclarer, sinon c'est juste une chaîne. Pour les objets, vous devez alors faire 'type: typeof FOO' comme l'indique l'erreur. Je ne suis pas tout à fait sûr de ce que vous demandez à votre 2 point cependant. Ensuite, vous finiriez avec un objet avec deux propriétés avec la même valeur de chaîne. – loganfsmyth