// 초과 프로퍼티
// 아래와 같이 지정되지 않은 인자를 추가하면 에러가 발생함.
printName({ first: "Mike", last: "Jagger", age: 476 });
// 하지만 변수에 설정한 후 호출하면 에러가 사라짐
const sig = { first: "Mike", last: "Jagger", age: 476, isAlive: true }
printName(sig)
// 필요한 것만 전달하고 나머지는 전달하지 않음
Type Alias 타입 별칭
타입을 재사용하고 이름을 지정하는 방법
여러 프로퍼티를 가지는 객체 타입에 작업
// 타입 별칭, 반복되어 재사용 가능한 타입을 지정함
type Point = {
x: number;
y: number;
};
let coordinate: Point = { x: 34, y: 2 };
function randomCoorinate(): Point {
return { x: Math.random(), y: Math.random() };
}
function doublePoint(point: Point): Point {
return { x: point.x * 2, y: point.y * 2 };
}
// 원시 타입도 가능
type MyNum = number
중첩 객체
중첩되는 객체도 타입 설정이 가능하다.
// 중첩 객체
type Song = {
title: string;
artist: string;
numStreams: number;
credits: { producer: string; writer: string };
};
function calculatePayout(song: Song): number {
return song.numStreams * 0.0033;
}
function printSong(song: Song) {
console.log(`${song.title} - ${song.artist}`);
}
const mySong: Song = {
title: "나는요",
artist: "IU",
numStreams: 151351351,
credits: {
producer: "IUA",
writer: "IUB",
},
};
선택적 프로퍼티
프로퍼티를 필수가 아닌 선택으로 설정할 수 있다.
// 선택적 프로퍼티
type Point = {
x: number;
y: number;
z?: number;
};
const myPoint: Point = { x: 1, y: 3 };
readonly
TS 에서 객체의 프로퍼티를 변경되지 않는 읽기전용으로 설정함
// Readonly
type User = {
readonly id: number;
username: string
}
const user: User = {
id: 12356,
username: "cotman"
}
console.log(user.id)
user.id = 235235
원시값의경우만 변경 불가능, 객체와 배열은 변경 가능함
교차 타입
여러 타입을 결합해 새로운 타입을 만들 수 있음
// 교차 타입
type Circle = {
radius: number;
};
type Colorful = {
color: string;
};
type ColorfulCircle = Circle & Colorful;
const happyFace: ColorfulCircle = {
radius: 4,
color: "Yellow",
};
type Cat = {
numLives: number;
};
type Dog = {
breed: string;
};
type CatDog = Cat & Dog & { age: number };
const christy: CatDog = {
numLives: 7,
breed: "Husky",
age: 33,
};