예제용 인터페이스
interface User {
id: number;
name: string;
age: number;
gender: "m" | "f";
}
: 인터페이스의 키 값들을 유니온 형태로 받을 수 있음
type UserKey = keyof User; // 'id' | 'name' | 'age' | 'gender'
const uk: UserKey = "age";
const uk2: UserKey = "name";
.
.
: 프로퍼티를 모두 옵션으로 바꿔준다. 그래서 일부만 사용하는게 가능해진다.
let admin: Partial<User> = {
id: 1,
name: "Bob",
};
: 모든 프로퍼티를 필수로 바꿔준다. (option처리 된 프로퍼티도 필수가 된다.)
let admin: Required<User> = {
id: 1,
name: "Bob",
age: 20,
gender: "m",
};
: 읽기전용으로 바꿔준다.
let admin: Readonly<User> = {
id: 1,
name: "Bob",
age: 20,
gender: "m",
};
admin.id = 4; // 에러, readonly이므로 수정 불가
예제 1)
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",
};
===
const score: Record<"1" | "2" | "3" | "4", "A" | "B" | "C" | "D"> = {
1:"A",
2:"C",
3:"B",
4:"D",
};
===
type Grade = "1" | "2" | "3" | "4";
type Score = "A" | "B" | "C" | "D"
const score: Record<Grade, Score> = {
1:"A",
2:"C",
3:"B",
4:"D",
};
예제 2)
interface User {
id: number;
name: string;
age: number;
}
function isValid(user:User){
const result: Record<keyof User, boolean>= {
id: user.id > 0,
name: user.name !== '',
age: user.age > 0
}
return result;
}
: T type에서 K 프로퍼티만 골라서(pick해서) 사용
interface User {
id: number;
name: string;
age: number;
gender: "m" | "f";
}
const admin: Pick<User, "id" | "name"> = { // User에서 id,name 만 사용
id: 0,
name: "Bob",
};
: 특정 프로퍼티를 생략하고 사용
const admin: Omit<User, "age" | "gender"> = { // User에서 age, gender 제외하고 사용
id: 0,
name: "Bob",
};
: T1(type 1) 에서 T2(type 2)를 제외하고 사용하는 방식 (겹치는 부분을 제거)
type T1 = string | number | boolean;
type T2 = Exclude<T1, number | string>;
: null과 undefined 를 제외한 type을 생성한다.
type T1 = string | null | undefined | void;
type T2 = NonNullable< T1 >