Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- angular route
- modal
- prisma
- angular animation
- 검색
- formgroup
- 셀렉트박스 커스텀
- ApexChart
- 앵귤러 모달
- Angular Router
- Oracle LISTAGG 사용 예시
- angular button
- 옵저버블
- mysql if
- TAILWIND
- angular modal
- route
- 스크롤 이벤트
- flex-1
- Router
- 호버
- summary
- scroll
- 아이오닉 스크롤 이벤트
- 스크롤 이벤트 감지
- ajax 사용 예시
- egov spring ajax 사용 예시
- 앵귤러 애니메이션
- Ionic modal
- 모달
Archives
- Today
- Total
깜놀하는 해므찌로
typescript Utility 유틸리티 활용 예시 / keyof, partial, required, readonly, record, pick, omit, exclude, nonNullAble 본문
IT
typescript Utility 유틸리티 활용 예시 / keyof, partial, required, readonly, record, pick, omit, exclude, nonNullAble
agnusdei1207 2023. 5. 28. 14:10반응형
SMALL
/** keyof */
interface User{
id:number;
name:string;
age:number;
gender:"m" | "f";
}
type UserKey = keyof User; // "id" | "name" | "age" | "gender"
const uk:UserKey = "id";
/* partial<T> : 프로퍼티를 모두 옵션으로 바꿈 */
let admin:Partial<User> = {
id : 1,
name : "이름"
}
/* partial 효과 ? 처리
interface User{
id?:number;
name?:string;
age?:number;
gender?:"m" | "f";
}
*/
/** required 모두 필수 프로퍼티로 바꿈 */
let req:Required<User> = {
id : 2,
name : "이름",
age : 30,
gender : "m"
}
/** readonly 모든 프로퍼티를 읽기 전용으로 바꿈 */
let rea:Readonly<User> = {
id : 1,
name : "이름",
age : 10,
gender : "m"
}
/** Record<K, T> */
interface Score{ // key, type
"1" : "A" | "B" | "C";
"2" : "A" | "B" | "C";
"3" : "A" | "B" | "C";
}
let score = {
1 : "A",
2 : "B",
3 : "C"
}
// 레코드 활용 예시
let score2:Record<"1" | "2" | "3", "A" | "B" | "C"> = {
1 : "A",
2 : "B",
3 : "C"
}
// type + record 활용 예시
type Grade = "1" | "2" | "3";
type Scor = "A" | "B" | "C";
let score3:Record<Grade, Scor> = { // 키, 타입
1 : "A",
2 : "B",
3 : "C"
}
interface User2{
id:number;
name:string;
age:number;
}
// 유효성 검사 함수
function isValid(user:User2){
let result:Record<keyof User2, boolean> = { // keyof 활용
id : user.id > 0,
name : user.name !== "",
age : user.age > 0
}
return result;
}
/** Pick<T, K> */
const admin2: Pick<User, "id" | "name"> = { // 해당 요소만 선택하여 사용
id : 0,
name : "이름"
}
/** Omit<T, K> */
const admin3: Omit<User, "id" | "name"> = { // 해당 요소만 제외하고 사용
age:30,
gender: "m"
}
/** Exclude<T1, T2> */
type T1 = string | number | boolean;
type T2 = Exclude<T1, string | number>; // T1 에서 string 타입만 제외
/** NonNullable : null 과 undefined 를 제외 */
type T3 = string | void | null | undefined;
type T4 = NonNullable<T3>; // string, void 만 남음
반응형
LIST
'IT' 카테고리의 다른 글
error: src refspec master does not match any 해결 (0) | 2023.05.29 |
---|---|
Angular 라우팅 모듈 생성 cli (0) | 2023.05.29 |
ngFor speed controll 반복문 속도 조절 Directive 예시 (0) | 2023.05.27 |
typescript Generic 활용 예시 (0) | 2023.05.27 |
Angular Animation condition 앵귤러 애니메이션 조건 예시 (0) | 2023.05.27 |