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


155

다음 유형이 있다고 가정하십시오.

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

이제이 유형을 확장하고 싶습니다.

type UserEvent extends Event = {
   UserId: string; 
}

작동하지 않습니다. 어떻게해야합니까?


3
type키워드는 정의하는 데 사용됩니다 유형 별칭 이 아닌 인터페이스 나 클래스를.
Heretic Monkey

답변:


283

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

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

type UserEvent = Event & {UserId: string}

TypeScript 2.2에 대한 업데이트 로 , 유형이 일부 제한 사항을 충족하는 경우 객체와 같은 유형을 확장하는 인터페이스를 가질 수 있습니다 .

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

interface UserEvent extends Event {
   UserId: string; 
}

그것은 다른 방식으로 작동하지 않습니다- 구문 을 사용하려는 경우 UserEvent가 아니라 인터페이스로 선언해야 합니다.typeextends

그리고 extend 임의의 유형과 함께 사용 하는 것은 여전히 ​​불가능합니다. 예를 들어 Event제약 조건이없는 유형 매개 변수 인 경우 작동하지 않습니다 .


TS v3.5.2를 사용하고 있으며 유형을 확장하는 인터페이스를 가질 수 없습니다. interface A<T> extends B<T> {blar}인터페이스는 정적으로 알려진 멤버와 함께 오브젝트 유형 또는 오브젝트 유형의 교차점 만 확장 할 수 있습니다.
WORMSS

@WORMSS에서이 작업을 수행하면 interface Identifiable<T> extends T { id: string }"인터페이스는 객체 유형 또는 정적으로 알려진 members.ts (2312)를 사용하여 객체 유형의 교차점 만 확장 할 수 있습니다"
maninak

22

유형을 교차시킬 수 있습니다.

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

코드 어딘가에서 이제 할 수 있습니다.

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

6

당신이 달성하려고하는 것은

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

interface UserEvent extends Event {
   UserId: string; 
}

타입을 정의한 방법으로 상속을 지정할 수는 없지만 artem이 지적한 것처럼 교차 타입을 사용하여 비슷한 것을 얻을 수 있습니다 .


8
그래,하지만 난 interface실제로 의미하는 단어를 좋아하지 않아type
Kousha

공정한 충분 다음, 아르 템의 대답은 : 당신에 맞게해야
olydis

-1

아래의 접근 방식은 reactjs를 가진 TS에게 도움이 될 것입니다.

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

interface UserEvent<T> extends Event<T> {
    UserId: string;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.