<aside> ☝ 목차
</aside>
<aside> 💡 실제 객체 데이터 정의 구분자로 쉼표(,)만 사용 가능 객체 이름은 소문자로 시작
</aside>
type UserType = {
name: '테드';
height: number;
};
const user: UserType = {
name: '테드',
height: 177,
};
console.log(user.name);
user.name = '테드친구'; // Error - '"테드친구"' 형식은 '"테드"' 형식에 할당할 수 없습니다.
객체의 실제 타입보다는 객체가 가진 속성과 메서드가 어떤 타입에 맞느냐가 중요
"만약 어떤 것이 오리처럼 걷고, 오리처럼 꽥꽥거린다면, 그것은 오리일 것이다" 라는 철학에서 이름이 유래
type Person = {
name: string;
age: number;
};
function greet(person: Person): void {
console.log(`Name: ${person.name}, / Age: ${person.age}`);
}
Person 타입이 명시적으로 구현되지 않은 객체 생성
const p1 = {
name: '테드',
age: 50,
};
const p2 = {
name: '테드친구',
age: 100,
};
const p3 = {
name: '테드친구2',
age: 150,
};
greet 함수 호출 : 인자로 Person 타입의 데이터가 전달 Person과 구조가 같기 때문에 Person으로 취급
greet(p1);
구조적 타이핑에 의해 Person으로 취급: hobby 속성을 무시한 채로 Person으로 인식
greet(p2);
Person 타입 속성의 구조와 일치하지 않음(age 속성 누락)
greet(p3); // Error - 에러 내용은 아래 사진 참고
객체 내부에 또 다른 객체를 포함하는 형태
복잡한 데이터를 조직화하고 관리하기 용이
사용자의 프로필과 주소 정보를 포함하는 중첩된 객체 타입 정의
type Address = {
street: string;
city: string;
zipCode: string;
};
type UserProfile = {
username: string;
email: string;
address: Address;
};
let userA: UserProfile = {
username: '테드',
email: '테드@테드.com',
address: {
street: '123 St',
city: 'Busan',
zipCode: '12345',
},
};
console.log(userA.username);
console.log(userA.address.city);