모든 속성을 명시하지 않아도 된다.
interface User {
name: string
age: number
}
const userA: User = {
name: 'A' // 에러
}
cosnt userB : Partial<User> = {
}
모든 속성을 명시해야만 한다.
interface User {
name: string
age: number
}
const userA: User = {
name: 'A',
age: 12
}
cosnt userB : Required<User> = { // 에러
name: 'B'
}
읽기 전용으로 만들 수 있다.
interface User {
name: string
age: number
}
const userA: User = {
name: 'A',
age: 12
}
cosnt userB : Readonly<User> = {
name: 'B',
age : 13
}
userA.name = 'AAA' // 에러
userB.name = 'BBB' // 에러
유니온 타입을 받아 속성을 만들고 속성이 어떤 타입이 될지 명시하는 용도
type Names = 'neo' | 'lewis'
type RecordNames = {
neo: number
lewis: number
}
const developers: Records<Names, number> = {
neo: 12,
lewist: 13
}
하나의 객체 타입에서 원하는 속성으로 새로운 객체 타입을 만듬
interface User {
name: string
age: number
email: string
isValid: boolean
}
interface PickUser {
name: string
email: string
}
const user: Pick<User, 'name' | 'email'> = {
name: 'Neo',
email: 'gnsdh8616@naver.com',
age: 26, // 에러
isValid: false // 에러
}
user는 PickUser와 동일한 형식을 지닌다.
Pick과 반대되는 개념으로 원하는 속성을 생략해 새로운 객체 타입을 만듬.
interface User {
name: string
age: number
email: string
isValid: boolean
}
interface PickUser {
age: number
isValid: boolean
}
const user: Omit<User, 'name' | 'email'> = {
name: 'Neo', // 에러
age: 26, // 에러
isValid: true
}
유니온 타입에서 특정 타입을 제외함
type T = string | number | boolean
const a: Exclude<T, number> = 'Only string' // string | boolean
const b: Exclude<T, string | boolean> = 1234 // number
유니온 타입에서 특정 타입을 추출함
type T = string | number | boolean
type U = number | boolean | string[]
const a: Extract<T, U> = 123 // number | boolean
const b: Extract<T, U> = 'Only number' // number | boolean // 에러
서로 교차되는 타입으로 이루어진 새로운 타입 반환
어떤 타입이 반환되는 지 알 수 있는 타입
function hello(msg: string) {
return `Hello ${msg}`
}
const a: ReturnType<typeof hello> = 'Only string'
const b: ReturnType<typeof hello> = 1234 // 에러
비동기에서 await해서 나오는 데이터의 타입을 알 수 있다.
;(async () => {
const promise = Promise.resolve(true)
console.log(await promise) // true
const a: Awaited<typeof promise> = 123 // 에러, boolean 타입 지정 됨
})()