종류가 많아서 일단 두 파트로 나눠서 정리하려 한다.
- 유틸리티 타입(1) : Partial / Required / Record / Readonly / Exclude
type User = {
firstName: string,
lastName: string
}
let firstUser:User = {
firstName: "John"
}
let firstUser:Partial<User> = {
firstName: "John"
}
→ 이는 다음 코드처럼 선언한 것과 같다.
type User = {
firstName?: string,
lastName?: string
}
type User = {
firstName: string,
lastName: string
}
// Partial타입 지정
let firstUser:Partial<User> = { firstName: "John" }
//일반적인 타입 지정
let secondUser:User = { firstName: "John", lastName: "Doe" }
type User = {
firstName: string,
lastName: string
}
let firstUser:User = {
firstName: "John"
}
?
를 추가하였다.type User = {
firstName: string,
lastName?: string
}
let firstUser:User = {
firstName: "John"
}
?
)을 줘서 에러는 해결했지만, lastName 프로퍼티까지 포함한 모든 프로퍼티가 필수로 필요한 상황이 생긴다면?type User = {
firstName: string,
lastName?: string
}
//firstUser는 lastName 프로퍼티를 가져도 되고 없어도 된다.
let firstUser:User = {
firstName: "John",
}
//secondUser는 firstName과 lastName을 필수로 가지고 있어야 한다.
let secondUser:Required<User> = {
firstName: "John"
}
type User = {
firstName: string,
lastName?: string
}
let secondUser:Required<User> = {
firstName: "John",
lastName: "Doe"
}
const myData = {
"123-123-123" : { firstName: "John", lastName: "Doe" },
"124-124-124" : { firstName: "Sarah", lastName: "Doe" },
"125-125-125" : { firstName: "Jane", lastName: "Smith" }
}
type User = {
firstName: string,
lastName: string
}
//key는 string, value는 User타입이다!
const myData:Record<string, User> = {
"123-123-123" : { firstName: "John", lastName: "Doe" },
"124-124-124" : { firstName: "Sarah", lastName: "Doe" },
"125-125-125" : { firstName: "Jane", lastName: "Smith" }
}
const myData = {
"uk" : { firstName: "John", lastName: "Doe" },
"france" : { firstName: "Sarah", lastName: "Doe" },
"india" : { firstName: "Jane", lastName: "Smith" }
}
type User = {
firstName: string,
lastName: string
}
// Country는 uk, france, india 세개의 값만 허용한다.
type Country = "uk" | "france" | "india";
//key를 Country타입으로 지정한다.
const myData:Record<Country, User> = {
"uk" : { firstName: "John", lastName: "Doe" },
"france" : { firstName: "Sarah", lastName: "Doe" },
"india" : { firstName: "Jane", lastName: "Smith" }
}
type User = {
firstName: string,
lastName: string
}
let firstUser:Readonly<User> = {
firstName: "John",
lastName: "Doe"
}
→ 만약 firstName 프로퍼티를 수정하려고 한다면 에러가 난다.
firstUser.firstName = 'Alex';
let myVariable:Readonly<string> = "Hello World";
myVariable = "Goodbye World";
console.log('myVariable : ',myVariable);
→ 콘솔에 찍힌 결과
참고 및 출처) How the TypeScript Exclude Type Works
type myUnionType = "🍇" | "🍎" | "🍑" | "🍋";
//성공!
let myString:myUnionType = "🍇"
//실패..
let secondString:myUnionType = "some-string"
//성공!
let noLemonsPleaseFirst:Exclude<myUnionType, "🍋"> = "🍇";
//실패..
let noLemonsPleaseSecond:Exclude<myUnionType, "🍋"> = "🍋";
예고) 유틸리티 타입(2) : Extract / Omit / Pick / Parameters / NonNullable / ReturnType