반응형
이 글에서는 typescript 환경에서 type또는 interface를 그대로 가져오며 타입 재정의가 필요한 속성을 재정의 하는 방법을 다룬다.
type의 경우
예를 들어 아래와 같은 Test1 타입이 있다고 가정한다.
type Test1 = {
test1: string,
test2: string,
test3: number,
};
const test1: Test1 = {test1: 'test1', test2: 'test2', test3: 3};
이 때 Test1의 속성인 test3를 string 바꾼 새로운 타입이 필요하다고 가정한다. 그럴 때 아래와 같은 코드를 적용하면 된다.
type Test2 = Omit<Test1, 'test3'> & { test3: string };
const test2: Test2 = {test1: 'test1', test2: 'test2', test3: 'test3'};
Omit을 사용해서 test3의 속성을 제거한 타입을 가져온 후 test3를 다시 정의해 주는 방식으로 타입을 지정할 수 있다.
interface의 경우
인터페이스의 경우도 동일하게 Omit을 사용해서 제거 후 재정의 하는 방식이다.
하지만 type과 interface가 다른만큼 문법이 약간 다르다.
아래와 같은 Test1 interface가 있다고 가정한다.
interface Test1 {
test1: string;
test2: string;
test3: number;
}
const test1: Test1 = {test1: 'test1', test2: 'test2', test3: 3};
이 때 type의 경우와 마찬가지로 Test1의 test3속성을 string으로 바꾼 새로운 타입이 필요하다고 가정한다. 그럴 때 아래와 같은 코드를 적용하면 된다.
interface Test2 extends Omit<Test1, 'test3'> {
test3: string;
}
const test2: Test2 = {test1: 'test1', test2: 'test2', test3: 'test3'};
Omit을사용해서 test3를 제거한 타입을 상속받고 test3를 재정의 하는 방식으로 interface를 지정할 수 있다.
위와 같은 상황은 이런 경우에 도움이 될 수 있다.
- 최상위 타입에서 일부만 타입이 다른 타입이 필요한 경우
- 나머지 속성의 타입은 똑같은데 일부만 타입이 다른경우
반응형
'Programming > Typescript' 카테고리의 다른 글
[Typescript] typescript에서 enum을 반복하는 방법 (0) | 2022.11.08 |
---|---|
[Typescript] typescript에서 express의 request를 확장해서 사용하는 방법 (0) | 2022.07.29 |
[Typescript] Typescript에서 class가 다중상속을 지원하지 않는 이유 (다이아몬드 문제) (0) | 2022.07.24 |
[Mongoose] mongoose를 typescript와 사용하는 방법 (0) | 2022.07.11 |
[Typescript] typescript 에서 filter 사용시 주의할 점 (0) | 2022.06.21 |