찾다

 >  Q&A  >  본문

TypeScript에서 타입 캐스팅 없이 기본 클래스 인스턴스를 파생 클래스로 변환

기본 클래스에서 새 클래스를 확장하고 몇 가지 속성을 추가했습니다. 지정된 기본 클래스(연결된 속성 포함)를 사용하여 파생 클래스의 인스턴스를 만드는 방법은 무엇입니까?

이 코드는 작동하지만 클래스 유형을 캐스팅하며 유형이 안전하지 않습니다

유형 변환 없이 이 작업을 수행하는 방법은 무엇입니까?

// 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;
}

P粉451614834P粉451614834274일 전400

모든 응답(2)나는 대답할 것이다

  • P粉765570115

    P粉7655701152024-02-26 14:10:39

    귀하의 접근 방식을 사용하여 형변환을 완전히 배제하는 것이 가능하다고 생각하지 않지만 type Guard 检查变量 result 是否有效 CustomClass (在我的实现中是 isCustomClass )을 사용하면 안전할 것입니다. 으아아아

    회신하다
    0
  • P粉486138196

    P粉4861381962024-02-26 11:51:43

    Object.assign () 메서드를 사용하여 대상 개체에 속성을 추가할 수 있습니다. 이 메서드는 입력 유형의 교차점인 TypeScript 라이브러리의 대상 개체와 해당 호출 서명을 반환합니다.

    즉, createCustomClass()를 다음과 같이 구현할 수 있습니다.

    으아아아

    반환 유형이 BaseClass & {value: number},其结构与 CustomClass동일하므로 함수가 오류 없이 컴파일되고 필수 유형 어설션도 없습니다.

    플레이그라운드 코드 링크

    회신하다
    0
  • 취소회신하다