Переход к TypeScript миграции - PullRequest
2 голосов
/ 06 июля 2019

Я пытаюсь перенести проект, который я не написал, из Flow в TypeScript.У меня есть некоторая структура потока, для которой я не могу найти эквивалент в TypeScript.

type Value =
  | string
  | number
  | boolean
  | BaseObject
  | Array<BaseObject>

type BaseObject = ObjectMap<?Value> & {
  meta?: BaseObject;
}

type ObjectMap<T> = {
  [key: string]: T;
};

Я получил следующие ошибки: Type alias 'BaseObject' circularly references itself и Type alias 'Value' circularly references itself.Я понимаю, что означает эта ошибка, но я не могу найти способ получить то же поведение без ошибок в TS.

Есть идеи?

1 Ответ

2 голосов
/ 07 июля 2019

Вот код на игровой площадке (и эквивалент Поток на игровой площадке ).

// The unchanged Flow type works in TypeScript.
type Value =
    | string
    | number
    | boolean
    | BaseObject
    | Array<BaseObject>

// The unchanged Flow type works in TypeScript.
type ObjectMap<T> = {
    [key: string]: T;
};

// The unchanged Flow type...
// type BaseObject = ObjectMap<?Value> & {
//     meta?: BaseObject;
// }

// ...and the equivalent TypeScript.
interface BaseObject extends ObjectMap<Value | null | undefined> {
    meta?: BaseObject;
}

Некоторые примечания о различиях:

Демо

const x: BaseObject = {
    prop1: null,
    prop2: undefined,
    prop3: 'prop3',
    prop4: 10,
    prop5: {
        meta: {}
    },
    prop6: [{
        meta: {}
    }],
    prop7: new Date() // causes an error
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...