Странная проблема с типизацией потока - PullRequest
0 голосов
/ 29 сентября 2019

В моем приложении React я пытаюсь заставить все работать должным образом с проверкой типов в Flow. Я столкнулся с интересной ситуацией, которую не могу понять. Вот соответствующий код:

// @flow
export const UPDATE_SESSION_PROP: string = 'UPDATE_SESSION_PROP';

// This fails
type UserEmailAction = {type: UPDATE_SESSION_PROP,
                        propName: 'currentUserEmail',
                        payload: string};

// But this works
type UserEmailAction = {type: 'UPDATE_SESSION_PROP',
                        propName: 'currentUserEmail',
                        payload: string};

Ошибка потока: Cannot use string as a type because string is a value. To get the type of a value use 'typeof'.Flow(InferError)

Разве два type оператора не эквивалентны выше?

1 Ответ

0 голосов
/ 29 сентября 2019

Как и в случае ошибки, вы не можете использовать значение в качестве типа. Что вы можете сделать, это что-то вроде этого.

export type UPDATE_SESSION_PROP = 'UPDATE_SESSION_PROP';

// This works
type UserEmailAction = {type: UPDATE_SESSION_PROP,
                        propName: 'currentUserEmail',
                        payload: string};

И реализация второй версии на самом деле имеет другое значение. Если означает, что вы делаете 'UPDATE_SESSION_PROP' в качестве единственного приемлемого значения для type

//This works becuase `UPDATE_SESSION_PROP` is considered Literal Type
type UserEmailAction = {type: 'UPDATE_SESSION_PROP',
                        propName: 'currentUserEmail',
                        payload: string};

Литеральный тип - Поток

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...