source

Typescript에서 유형을 확장할 수 있습니까?

factcode 2022. 9. 20. 23:51
반응형

Typescript에서 유형을 확장할 수 있습니까?

예를 들어 다음과 같은 타입이 있습니다.

type Event = {
   name: string;
   dateCreated: string;
   type: string;
}

이제 이 유형을 확장하려고 합니다.

type UserEvent extends Event = {
   UserId: string; 
}

이거 안 되네.이거 어떻게 해?

키워드extends는 인터페이스 및 클래스에만 사용할 수 있습니다.

추가 속성이 있는 유형만 선언하려는 경우 교차 유형을 사용할 수 있습니다.

type UserEvent = Event & {UserId: string}

TypeScript 2.2의 UPDATE. 유형이 몇 가지 제한을 충족하는 경우 개체와 같은 유형을 확장하는 인터페이스를 사용할 수 있습니다.

type Event = {
   name: string;
   dateCreated: string;
   type: string;
}

interface UserEvent extends Event {
   UserId: string; 
}

그 반대로는 동작하지 않습니다.UserEvent인터페이스로 선언해야 합니다.type사용하고 싶다면extends구문을 사용합니다.

그리고 아직 쓸 수 없다.extend 를 들어, 다음과 같은 경우에는 동작하지 않습니다.Event는 제약이 없는 타입 파라미터입니다.

유형을 교차할 수 있습니다.

type TypeA = {
    nameA: string;
};
type TypeB = {
    nameB: string;
};
export type TypeC = TypeA & TypeB;

코드 내 어딘가에서 다음 작업을 수행할 수 있습니다.

const some: TypeC = {
    nameB: 'B',
    nameA: 'A',
};

달성하려고 하는 것은 다음과 같습니다.

interface Event {
   name: string;
   dateCreated: string;
   type: string;
}

interface UserEvent extends Event {
   UserId: string; 
}

유형을 정의한 방법으로는 상속을 지정할 수 없지만 artem이 지적한 바와 같이 교차 유형을 사용하여 유사한 작업을 수행할 수 있습니다.

범용 확장자 타입은 다음과 같이 쓸 수 있습니다.

type Extension<T> = T & { someExtensionProperty: string }

언급URL : https://stackoverflow.com/questions/41385059/possible-to-extend-types-in-typescript

반응형