keyof
interface의 key값을 union형태로 반환
interface User{
id :number;
name:string;
age: number;
gender:'m' | 'f';
}
type UserKey = keyof User; // 'id' | 'name' | 'age' | 'gender'
// 타입에 없는 값이므로 오류를 출력한다.
// const uk:UserKey = 'ag';
const uk:UserKey = 'age';
Partial<T> (파셜)
프로퍼티를 모두 옵션으로 바꿔줘서 일부만 사용이 가능하다.
interface User{
id :number;
name:string;
age: number;
gender:'m' | 'f';
}
// 위와 동일한 형태
//interface User{
// id ?:number;
// name?:string;
// age?: number;
// gender?:'m' | 'f';
//}
let admin:Partial<User> = {
id:1,
name:'bob',
}
Required<T>
모든 프로퍼티를 필수로 바꿔준다.
interface User{
id :number;
name:string;
age: number;
gender:'m' | 'f';
}
let admin:Required<User> = {
id:1,
name:'bob',
age:20,
gender:'m'
}
Readonly<T>
처음 할당만 가능하고 수정은 불가능
interface User{
id :number;
name:string;
age: number;
gender:'m' | 'f';
}
let admin:Readonly<User> = {
id:1,
name:'bob',
age:20,
gender:'m'
}
admin.id = 2; // 불가능!!!
Recored<K,T>
K: key / T: type
key와 type을 지정하여 사용한다.
// before
interface Score{
'1':'A' | 'B' | 'C' | 'D';
'2':'A' | 'B' | 'C' | 'D';
'3':'A' | 'B' | 'C' | 'D';
'4':'A' | 'B' | 'C' | 'D';
}
const score: Score={
1:'A',
2:'B',
3:'C',
4:'D'
};
// after 1
// 위와 동일한 형태
const score:Record<'1' | '2' | '3' | '4', 'A' | 'B' | 'C' | 'D'>={
1:'A',
2:'B',
3:'C',
4:'D'
};
// after final
// type을 지정하여 key와 value값을 나눈다
type Grade = '1' | '2' | '3' | '4';
type Score = 'A' | 'B' | 'C' | 'D';
const score:Record<Grade, Score>={
1:'A',
2:'B',
3:'C',
4:'D'
};
interface User{
id:number;
name:string;
age:number;
}
function isValid(user:User){
const result:Record<keyof User, boolean> = { // User의 key를 key로 받고 값은 boolean이다
id:user.id > 0,
name: user.name != '',
age: user.age > 0
}
return result;
}
Pick<T,K>
T타입에서 K프로퍼티만 골라서 사용
interface User{
id:number;
name:string;
age:number;
gender:'m'|'w';
}
const admin: Pick<User, 'id' | 'name'> = {
id:0,
name:'bob'
}
Omit<T,K>
T타입에서 K프로퍼티만 생략해서 사용
interface User{
id:number;
name:string;
age:number;
gender:'m'|'w';
}
const admin: Omit<User, 'id' | 'name'> = {
age:0,
gender:'m'
}
Exclude<T1, T2>
T1의 타입에서 T2의 타입을 제외하고 사용하는것
type T1 = string | number | boolean;
type T2 = Exclude<T1, number | boolean>
// 결과
type T2 = string;
NonNullable<Type>
null과 undefined을 제외한 타입을 생성
type T1 = string | null | undefined | void;
type T2 = NonNullable<T1>;
//결과
type T2 = string | void;
출처
https://www.youtube.com/watch?v=IeXZo-JXJjc&list=PLZKTXPmaJk8KhKQ_BILr1JKCJbR0EGlx0&index=8
'FrontEnd Dev > typescript' 카테고리의 다른 글
[typescript] generic<> (0) | 2022.07.10 |
---|---|
[typescript] class - 접근제한자, 추상클래스/추상메서드(abstract) (0) | 2022.07.10 |
[typescript] 리터럴, 유니온/교차 타입 (0) | 2022.07.10 |
[typescript] 함수를 정의하는 방법 (0) | 2022.07.10 |
[typescript] interface (0) | 2022.07.10 |