TypeScript에서 타입 캐스팅 없이 기본 클래스 인스턴스를 파생 클래스로 변환
P粉451614834
P粉451614834 2024-02-25 19:48:09
0
2
340

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

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

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

// 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粉451614834
P粉451614834

모든 응답(2)
P粉765570115

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

P粉486138196

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

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

으아아아

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

플레이그라운드 코드 링크 p>

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!