programing

2개의 인터페이스의 Marge

css3 2023. 3. 31. 22:35

2개의 인터페이스의 Marge

확인 또는 해명 요구

인터페이스가 2개 있는 경우.이러한 2개의 인터페이스의 Marge를 작성하는 「적절한」방법은 무엇입니까?

IFoo {
  // some stuff
}


IBar {
  // some stuff
}


IFooBar extends IFoo, IBar {
 // Empty
}

작동은 되는데 기분이 이상해요. 빈 IFoo Bar를 잘못하고 있는 것 같아요.

제가 제대로 하고 있는 건가요?

또, 이것 또한 유효하다는 것도 깨달았습니다.

type IFooBar = IFoo & IBar;

나는 사용하는 것에 비논리적인 거부감이 있다.type하지만, 그것은 훨씬 깨끗하다.

문서에서는 인터페이스와 타입 에일리어스 간의 관계에 대해 매우 잘 설명합니다. 부분에서는 인터페이스와 타입 에일리어스 간의 작은 차이에 초점을 맞추고 있습니다.

둘다요.

interface IFooBar extends IFoo, IBar {}

그리고.

type IFooBar = IFoo & IBar;

일반적인 방법으로, 대부분의 경우 동일하게 동작합니다.부터type입력할 문자가 적기 때문에 선택할 수 있습니다.

혼합으로 인해 발생하는 불일치interface그리고.type문제가 되지 않습니다.그것들은 단지 목표를 달성하기 위한 적절한 기능일 뿐입니다.한다면const BarClass = FooClass그 일을 해내요.class BarClass extends FooClass {}항상 사용한다는 이유만으로 선호되어서는 안 됩니다.class(이 예는 설명 목적으로 사용되며 이러한 접근법에는 상당한 차이가 있습니다.)

그럼에도 불구하고.interface그리고.type는 마찬가지로 동작할 수 있습니다.마지된 인터페이스의 경우 차이가 있습니다(링크된 문서에 기재되어 있습니다).이 조작은 유효합니다.

interface FooBar extends IFoo, IBar {}
class FooBar { ... }

이로 인해 다음과 같은 유형 오류가 발생합니다.

type FooBar = IFoo & IBar;
class FooBar { ... }

멤버의 깊이가1레벨을 넘는2개의 인터페이스를 Marge 하는 경우는, 다음과 같이 합니다.

export interface TypeOne  {
  one: {
    two: {
      hello: string;
    }[]
  }
}

export type TypeTwo = {
  one: {
    two: {
      world: string;
    }[]
  }
} & TypeOne;

const x: TypeTwo;
x.one.two[0]. // autocomplete options are 'hello' / 'world'

머지된 인터페이스의 의미에 대해서는 문제가 없다고 생각합니다.한다면IFooBar오브젝트 지향 설계의 관점에서는 새로운 엔티티이므로 빈 인터페이스도 괜찮습니다.그러나 이러한 엔티티가 존재하지 않지만 관련되지 않은 인터페이스(일부 해킹코드용)를 Marge하고 싶을 경우,IFoo & IBar변수 유형 정의 또는type이걸 짧게 해줘서

C++나 C#과 같은 객체 지향 언어에서 나온 프로그래머로서의 의견일 뿐입니다.

언급URL : https://stackoverflow.com/questions/49723173/merge-two-interfaces