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과 함께 사용 된 유형을 계속 표시합니다.

아니면 미래에 호환되는 방식으로이 작업을 수행 할 수있는 유형 스크립트가 있습니까?

답변

0

아니면 미래에 더 호환되는 방식으로이 작업을 수행 할 수있는 유형 스크립트가 있습니까?

이것은 옳습니다. JavaScript에서와 마찬가지로 constructor을 사용하여 TypeScript에서 만들기 기능을 결정합니다.

+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

관련 문제