2017-01-25 2 views
0

Я пытаюсь передать метод конструктора строго типизированного массива методу.Функция конструктора для массива

Метод выглядит следующим образом:

foo<T>(clazz: {new(): T[]}) { 
    // ... 
} 

Но я не смог вызвать этот метод. Я попробовал foo<MyClass>(MyClass[]), но это просто создает ошибку компилятора.

Я пытаюсь использовать класс MapUtils от here для десериализации массива JSON в массив массивных типизированных объектов.

Я получаю следующий JSON:

[ 
    {name: "name1", ...}, 
    {name: "name2", ...} 
] 

И, используя MapUtils.deserialize, я хочу, чтобы это как результат:

[ 
    <Person> { name: "name1", ... }, 
    <Person> { name: "name2", ... } 
] 
+1

Конструктор может только создать экземпляр, он не может создать массив. Можете ли вы показать больше кода того, что вы пытаетесь сделать, пожалуйста? –

+0

@NitzanTomer: Пожалуйста, см. Обновление (последний абзац) –

+0

В этом посте есть часть для [Сопоставление массивов] (http://cloudmark.github.io/Json-Mapping/#mapping-arrays), это не хорошо для вас? Если нет, добавьте конкретный пример json, который вы получите, и класс, к которому вы хотите конвертировать. –

ответ

0

Я не использовал эту MapUtils вещь, но вы можете попробовать для этого:

MapUtils.deserialize(Array, JSON_DATA); 

Если это не сработает, вы можете просто перебрать по массиву и для каждого элемента используйте MapUtils.deserialize:

let arr = [] as Person[]; 
JSON_DATA.forEach(item => arr.push(MapUtils.deserialize(Person, item))); 

Или использовать Array.map метод:

let arr = JSON_DATA.map(item => MapUtils.deserialize(Person, item)); 
Смежные вопросы