partial 유틸리티 타입은 interface로 규정한 객체의 구조 중 property와 method를 선택적으로 구현할 수 있도록 한다.
/// partial type
interface userInfo {
name: string;
age: number;
money: number;
}
function creatUser(name: string, age: number, money: number): userInfo {
let user: Partial<userInfo> = {}; // Partial utility type을 쓰지 않으면 userInfo Interface의 contract를 지키지 않았다고 에러를 띄운다.
user.name = "otter1";
user.age = 11;
user.money = 1121212;
return user as userInfo;
}
/// Readonly utility type
const userList: Readonly<userInfo[]> = [
// userInfo 타입의 요소로 이뤄진 배열을 Readonly로 선언 및 할당
creatUser("otter1", 11, 111),
creatUser("otter2", 12, 222),
];
userList.push(creatUser("otter3", 13, 333)); // 리스트에 새로운 user를 추가하려고 하면 ERROR
예를 들어, someVariable<T extends number | string | boolean> T의 값을 유니언을 통해 제약조건을 걸어 주는 것 때문에 헷갈릴 수 있다.