Как отобразить DTO, используя интерфейсы в машинописи? - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь реализовать концепцию отображения морфизма / DTO в машинописи.

Чтобы дать краткий обзор концепции морфизма, морфизм относится к сохраняющей структуру карте из одной математической структуры в другую.Морфизм f с источником X и целью Y записывается как f: X → Y.

Подробнее о https://en.wikipedia.org/wiki/Morphism

Я пытаюсь выполнить сопоставление источника с назначением объекта сложного типа (т.е.объект, содержащий другой объект и массивы объекта) в общем виде с использованием морфизма StrictSchema.Пожалуйста, обратитесь к ссылке ниже, чтобы узнать больше о пакете морфизма npm.https://github.com/nobrainr/morphism

мой интерфейс

            interface IFoo {  
                  keyA: {
                  key1: number,
                  key2: number,
                  key3: [
                    {
                      key3A: string,
                      key3B: number
                    }
                  ],
                  key4: string
                },
                keyB: string,
                keyC: number,
                keyD: {
                  key1: string,
                  key2: {
                    key2A: string
                  },
                  key3: string
                },
                keyE: string
            }


            const schema: StrictSchema<IFoo> = 
            {  keyA: {
                  key1: 'somepath',
                  key2: 'somepath',
                  key3: [
                    {
                      key3A: 'somepath',
                      key3B: 'somepath'
                    }
                  ],
                  key4: 'somepath'
                },
                keyB: 'somepath',
                keyC: 'somepath',
                keyD: {
                  key1: 'somepath',
                  key2: {
                    key2A: 'somepath'
                  },
                  key3: 'somepath'
                },
                keyE: 'somepath'
            };

        const target = morphism(schema, someSourceObject);

Здесь схема - это карта сохранения объекта для моего интерфейса.Я добавил «somepath» в качестве значения для каждого ключа, и я заменил его на некоторый фактический путь от фактического исходного объекта.но при этом я получаю: Ошибка: ожидаемый тип происходит из свойства 'keyA', которое объявлено здесь для типа 'StrictSchema

Итак, прежде всего, могу ли я сохранить отображение в вышеупомянутом сценарии, используя морфизм, потому что яне сталкивались с такими примерами, используя ScrictSchema.Если да, то как?

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Просто ответ на запрос.Помимо предложения разбить интерфейс на более мелкие схемы, я также реализовал возможность создания сложного объекта из схемы.Доступно в последней версии Морфизм: 1.9.1

Вот Github Issue и рабочий реплик

0 голосов
/ 14 февраля 2019

Вы можете попытаться реализовать свой интерфейс для строгой схемы, используя вложенные интерфейсы или сложные сигнатуры интерфейсов.

Вот ссылка на StackOverflow о том, как этого добиться: Typescript: Как определить интерфейсыдля вложенных объектов?

В качестве альтернативы вы можете использовать другой пакет npm для сопоставления домена с моделью в машинописи, такой как Automapper для машинописи (https://github.com/loedeman/AutoMapper)

...