기본 클래스에서 새 클래스를 확장하고 몇 가지 속성을 추가했습니다. 지정된 기본 클래스(연결된 속성 포함)를 사용하여 파생 클래스의 인스턴스를 만드는 방법은 무엇입니까?
이 코드는 작동하지만 클래스 유형을 캐스팅하며 유형이 안전하지 않습니다
// Base class is imported from a package. Not editable class BaseClass { public x: number; public power() { return this.x * 2; } } export interface CustomClass extends BaseClass { value: number; } function createCustomClass(base: BaseClass, myValue: number): CustomClass { // it's not type safe to cast this variable // How to do it the right way in Typescript? const result: CustomClass = base as CustomClass; result.value = myValue; return result; }
귀하의 접근 방식을 사용하여 형변환을 완전히 배제하는 것이 가능하다고 생각하지 않지만
type Guard
检查变量result
是否有效CustomClass
(在我的实现中是isCustomClass
)을 사용하면 안전할 것입니다. p> 으아아아Object.assign ()
메서드를 사용하여 대상 개체에 속성을 추가할 수 있습니다. 이 메서드는 입력 유형의 교차점인 TypeScript 라이브러리의 대상 개체와 해당 호출 서명을 반환합니다.즉,
으아아아createCustomClass()
를 다음과 같이 구현할 수 있습니다.반환 유형이
BaseClass & {value: number}
,其结构与CustomClass
동일하므로 함수가 오류 없이 컴파일되고 필수 유형 어설션도 없습니다.플레이그라운드 코드 링크 p>