타입스크립트 올인원(Partial, Pick 등 메서드 타입 분석)

하윤·2022년 11월 29일
0

타입스크립트

목록 보기
5/5

Partial?

interface Profile{
name:string,
age:number,
married:boolean
}

const newZeroCho:Partail<Profile>={
	name:'zerocho',
    age:29,

}

이런식으로 몇개의 attrubute를 빼고 선언을 할때, Partail 기능을 사용할 수 있다. Partial 기능을 쓰면, 속성들을 전부다 optianal로 만들어준다.

type P<T>={
	[key in keyof Profile]?:T[Key],
} 

//실제 partial 코드 역시 이와 같다.

이런식으로 partial을 직접 선언해주는 것 역시 가능하다.이런식으로 optianal 선언을 개개인 별로 해줄 필요 없이, partial 기능을 이용하면 일일이 해주는 것이 아닌 optional 관리를 간편하게 할 수 있다.

Pick?

하지만, partial은 전부다 optional이 되기 때문에, 이 문제를 해결해주기 위해서는 pick 또는 omit을 사용하게 된다.

const newZeroCho:Pick<Profile, 'name'| 'age'>={
	name:'zerocho',
    age:29,

}

이런식으로 하면, Profile의 name과 age만 가져오는것이 된다. 반대로, OMIT은 지정한 하나만 빼주는 것이라고 생각하면 편하다.

type P<T,S extends keyof T>={

	[Key in keyof S] : S[Key];
}

'name'|'car' 이런건 옳지 않으니까!

T와 S는 서로 관게 되어있다. S는 T에 속해있는 애들만 가능하다는 조건이 있다. 그래서 제한조건을 넣어줘야하는데, 그 제한 조건이 바로 extends문!

따라서, 서로 generic 선언을 할때, 그 generic의 규칙을 정의해주고 제한조건을 적어주는게 중요하다! extends문 처럼

Omit?

const newZeroCho:Omit<Profile,'age'>={
	name:'zerocho',
    age:29,

}

이렇게 하면, age를 뺀 속성들을 의미한다!이 Omit에는 exclude라는게 사용되게 된다.

type Animak= 'Cat'|'Dog'|'Human';
type Mammal = Exclude<Animal, 'Human'>
type A=Exclude<keyof Profile,'married'>

Exclude역시 OMIT과 비슷하다. 이 경우, mammal은 휴먼을 뺀 캣과 도그 두개만 선언되게 된다!

type O<T,S extends keyof any>= Pick<T,Exclude<keyof T, S>>

이런식으로, Pick과 Exclude를 혼합해서 Omit을 직접 구현할 수 있었다. 여기서도 S가 아무값이나 오면 안되기에, S의 제한조건을 선언해주었다.

근데 S extends keyof any가 무슨뜻..? S는 스트링 넘버 심볼중에 되게 선언하기 위해서 사용하였다. 이러한 제한 조건에 대한 학습이 필요하다! (강의에는 별로 없는데.. 추가로 학습하면 좋을 것 같다)

type Exclude <T,U>=T extends U ? never: T,

이런식으로 이해하면 좋은데, 조건에 부합하면 never로, 부합하지 않으면 T로 향하는 삼항 연산자개념으로 생각하면 좋다.

(예를들면 animal extends Human은 거짓이므로 never, human extends human은 True니까 T로 들어가게 된다)

Required?

이미 정의된 속성이 전부다 Optianal인데, 그것들을 필수로 만들어주고 싶을때 Required로 선언해주면 된다.

const zerocho:Required<Profile>={

name:'zerocho', age: 29, married: false};

이런식으로 Required를 사용할 수 있다. 여기서 프로파일의 모든 속성은 옵셔널이라는 가정!

const zerocho:ReadOnly<Profile>={

name:'zerocho', age: 29, married: false};

이외의 객체 값 수정을 못하게 만들어주는 것이 ReadOnly. 이 과정중에는 -? -readOnly등 -를 이용해서 떼버리는 기능이 세부에 있다 ( -readonly, -?등등)

record?

record는 객체를 표현하는 방법이다.

interface OBJ{
[key:string]:number;
}
const a:Record<string,number>={a:3,b:5,c:7}; 

이런식으로 간단하게 선언된 객체를 아주 간단하게 사용하게 해준다.
(이거 설명이 너무 빈약하다 영상에서.....)

NonNullable

NonNullable은 key에 적용되는 애들이다.

type A= string| null | undefined| boolean| number;
type B=NonNullable<A>

이런식으로 B는 null과 undefined를 제외한 스트링, 불린, 넘버 3가지로 선언되게 된다.

type N<T>= T extends null|undefined?never:T

이런식으로 간단한 구현이 가능하다!

profile
넓은 시야를 가진 개발자를 꿈꾸는

0개의 댓글