Как использовать строковое значение в качестве литерального типа в Flowtype? - PullRequest
0 голосов
/ 20 июня 2019

Typescript позволяет мне иметь определение вроде:

export enum LineType {
  Adventure,
  Lift
}

export type AdventureLine =
{
  type: LineType.Adventure;
}

Я могу делать подобные вещи в Flow:

export const LineType = {
  Adventure: "Adventure",
  Lift: "Lift"
}
Object.freeze(LineType);
export type LineTypeEnum = $Enum<typeof LineType>;

export type AdventureLine =
{
  type: LineType.Adventure;
}

, но это не компилируется type: LineType.Adventure; - Flow говорит: "Невозможно использовать строку как тип".Конечно, я мог бы написать type: "Adventure";, но это не очень СУХОЙ.

Так как же использовать строковое значение в качестве литерального типа в Flow?

Ответы [ 2 ]

1 голос
/ 22 июня 2019

А как насчет этого ?

const Adventure: "Adventure" = "Adventure";
const Lift: "Lift" = "Lift";

export const LineType = {  Adventure,  Lift };
Object.freeze(LineType);
export type LineTypeEnum = $Enum<typeof LineType>;

export type AdventureLine =
{
  type: typeof LineType.Adventure;
}

({ type: "Adventure" }: AdventureLine); // works

({ type: "x" }: AdventureLine); // gives erros
1 голос
/ 20 июня 2019

Хотелось бы что-нибудь подобное для вас?

type LineType = { Adventure: "Adventure", Lift: "Lift" };
type AdventureLine = { type: $PropertyType<LineType, 'Adventure'> };

({ type: "Adventure" }: AdventureLine); // no error
({ type: "Lift" }: AdventureLine); // error

Попробуйте Flow

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