Partial<T>
일부의 속성만 가질 수 있을 때 사용한다. 예를 들어 게시글 인터페이스엔 제목, 글쓴이, 내용 등등이 있을 것이다.
게시글 수정시 항상 모든 필드를 수정하지는 않는다. 게시글에 포함된 프로퍼티 중 일부의 프로퍼티(하위 타입 집합)만 사용하고 싶을 때 사용할 수 있다.
interface Post {
title: string;
author: string;
content: string;
isHidden: boolean;
}
// 게시글을 작성한다.
const newPost = {
title: 'hello world',
author: 'effy',
content: 'hello',
isHidden: false,
}
// 수정하고 싶어졌다. 제목만 바꿀수도 있고, 내용만 바꿀수도 있고, 다 바꿀수도 있다.
function update(post: Post, payload: Partial<Post>) {
return {...post, ...payload}
}
update(newPost, {title: 'hi world', isHidden: true})
/**
{
title: 'hi world',
author: 'effy',
content: 'hello',
isHidden: true,
}
*/
Readonly<T>
이름에서 알 수 있듯, 읽기 전용으로 정의한다. 재할당이 불가능해지며, 재할당시 에러를 리턴한다.
interface Person {
name: string;
}
const effy: Readonly<Person> = {name: 'effy'};
effy.name = 'moro'; // Error
Record<K, T>
공통 타입(T)을 가진 특정 프로퍼티(K) 타입들을 정의할 수 있다.
interface Spec {
legs: number;
wings: boolean;
}
type Animal = 'cat' | 'bird' | 'fish';
const animalSpecs: Record<Animal, Spec> = {
cat: {legs: 4, wings: false},
bird: {legs: 2, wings: true},
fish: {legs: 0, wings: false},
}
Partial과 함께 써서 다양하지만 비슷한 모델들에 대해 유연한 타입을 만들 수도 있을 것 같다.
'Web development > Node.js & Typescript' 카테고리의 다른 글
[Typescript] 유틸리티 타입 - Parameters, ReturnType, Required (0) | 2020.08.01 |
---|---|
[Typscript] 유틸리티 타입 - Pick, Omit (0) | 2020.07.22 |
var vs let vs const (0) | 2020.07.19 |
[Typescript] 제네릭(Generic)을 사용하는 이유 (0) | 2020.07.10 |
[Sequelize] there is no unique constraint matching given keys for referenced table 원인과 해결방법 (0) | 2020.06.23 |
댓글