Say mam następujący stały ciąg:rodzaje przepływów z ciągami stałymi oraz typy zależne
export default const FOO = 'FOO'
powiedzieć, że import ten w adnotacją pliku przepływu tak:
import FOO from '../consts/Foo'
Następnie mam funkcję:
const example = (foo : string) : {| type: FOO, foo: string |} => {
return {type: FOO, foo: foo}
}
nie typecheck z:
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
Więc moje pytania to:
1) możliwe jest używać stałych typów przepływu, jak mogę odtworzyć to zachowanie?
2) Czy możliwe jest wykonywanie zależnych typów w przepływie? więc na przykład, czy mogę kodować, poprzez typy, że zwracany ciąg musi być tym samym ciągiem, który jest przekazywany do funkcji example
?
EDIT: Wyjaśnienie do części 2: Czy jest możliwe, aby w jakiś sposób wskazać, że parametr foo
przekazywane do funkcji example
jest w rzeczywistości ten sam ciąg jako ciąg w kluczu obiektu powrotnej foo
? Lub twierdzić, że wejście i wyjście mają tę samą długość (na przykład funkcja szyfru przesunięcia). Lub powiedzmy, że zawiera permutację tych samych znaków? (dla shuffle).
https://en.wikipedia.org/wiki/Dependent_type
Jeśli chcesz, aby 'FOO' miał typ' 'FOO'', musisz go zadeklarować, w przeciwnym razie jest to tylko ciąg znaków. W przypadku obiektów, należy wtedy wpisać 'type: typeof FOO', jak mówi błąd. Nie jestem do końca pewien, o co pytasz w swoim 2) punkcie. Wówczas otrzymasz obiekt z dwiema właściwościami o tej samej wartości ciągu. – loganfsmyth