2017-11-30 24 views
1

나는 IPreferences이라는 인터페이스를 가지고 있습니다. 그것은 다음과 같습니다 : 나는 사용자가 자신의 환경 설정을 업데이트하고 하나 개 이상의 필드를 업데이트 할 수 있기 때문에, 내가두 가지 버전의 인터페이스를 만들 수 있습니까? 하나는 선택 사항이고 나머지 하나는 필수 입력란입니다.

같은
export interface IPreferencesUpdateRequest { 
    genres?: Genres[], 
    singers?: Singer[], 
    volume?: number 
} 

을 보이는 인터페이스 IPreferenceUpdateRequest를 생성하지만이 나쁜

export interface IPreferences { 
    genres: Genres[], 
    singers: Singer[], 
    volume: number 
} 

I 때문에 이제 거의 동일한 두 개의 인터페이스가 있습니다.

어쨌든이 일을 할 수 있습니까? DRY?

답변

1

예! Partial<IPreferences>을 사용하십시오. TypeScript standard library에 정의 된 Partial<T> 유형은 선택 사항 버전으로 T의 모든 속성을 매핑하는 mapped type입니다 :

export type IPreferencesUpdateRequest = Partial<IPreferences> 

희망하는 데 도움이; 행운을 빕니다!

+0

와우, 정말 끝내 주네. 이 유스 케이스가 표준 라이브러리에 유형을 생성하기에 충분할 정도로 commmon인지 알지 못했습니다. 감사! – CodyBugstein

1

예 타이프에 정의 된 Partial<T> 유형은 전자이 매우 건조 방법을 사용하면 다음을 수행 할 수 있습니다

export type IPreferencesUpdateRequest = Partial<IPreferences>;