2016-10-26 3 views
0

Я пишу код, обрабатывающий экземпляр классов (unmarshaller).TypeScript - установить искусственный объект для определенного класса

Во-первых, я создаю объект. Я делаю это, используя let obj = new BaseModel.
Во время обработки входных данных я в конечном итоге выясню класс объекта без маршаллинга.
У меня есть этот класс, с точки зрения <T extends BaseModel> clazz : { new(): T }.

Теперь я хотел бы изменить класс объекта, созданного ранее, таким образом, чтобы он не сталкивался с кодом обработки классов TypeScripts.

Правильно ли это?

Object.getPrototypeOf(result).constructor = clazz; 

Редактировать: Это не оно. Пока значение свойства остается, консоль браузеров по-прежнему показывает тип, используемый с new.

Возможно, есть ли конструкция в TypeScript, которая сделает это более совместимым с будущим способом?

ответ

0

Возможно, имеется конструктор в TypeScript, который сделает это более совместимым с будущим способом способом?

Это право. Вы используете constructor, чтобы определить функцию создания в TypeScript так же, как в JavaScript.

+0

Не могли бы вы добавить несколько примеров? Скажем, хотите, чтобы MyClass был классом существующего объекта. –

0

Если я правильно понял ваш вопрос, вы хотите изменить тип объекта во время выполнения из типа, созданного с помощью new, на другой, возможно, полученный тип.

Я думаю, вам будет лучше создать экземпляр класса, который вы хотите, а затем скопировать в него элементы другого объекта.

Если вы не хотите, чтобы запустить конструктор, вы можете сделать следующее с JQuery:

let newTypeObj:NewType = $.extend(true, Object.create(NewType.prototype), oldTypeObj); 

Если вы хотите запустить конструктор нового типа до слияния вы можете сделать:

let newTypeObj:NewType = new NewType(); 
$.extend(true, newTypeObj, oldTypeObj); 

Если у вас нет или не хотите использовать jQuery, вы можете написать функцию в своем новом типе, которая принимает экземпляр старого типа и копирует элементы или записывает общую расширённость, используя ванильный JavaScript.

Этот вопрос имеет немного больше об альтернативах, но общий консенсус, кажется, что вы не можете изменить класс объекта: Changing an Object's Type in JavaScript

Смежные вопросы