function sing(song: string) {
  console.log(`Singing: ${song}`);
}

📍 필수 매개변수

function singTwo(first: string, second: string) {
  console.log(`${first} / ${second}`);
}

// ❌ error
singTwo("Ball and Chain");

// ✅ Ok
singTwo("I Will Survive", "Higher Love");

// ❌ error
singTwo("Go Your Own Way", "The Chain", "Dreams");

📍 선택적 매개변수

function announceSong(song: string, singer?: string) {
  console.log(`Song: ${song}`);

  if (singer) {
    console.log(`Singer: ${singer}`);
  }
}

announceSong("Greensleeves"); // ✅ Ok
announceSong("Greensleeves", undefined); // ✅ Ok
announceSong("Greensleeves", "Sia"); // ✅ Ok

function announceSongBy(song: string, singer: string | undefined) {
  console.log(`Song: ${song}`);

  if (singer) {
    console.log(`Singer: ${singer}`);
  }
}

announceSongBy("Greensleeves"); // ❌ Error
announceSongBy("Greensleeves", undefined); // ✅ Ok
announceSongBy("Greensleeves", "Sia"); // ✅ Ok

function announceSinger(singer?: string, song: string) {} // ❌ Error

📍 기본 매개변수

function rateSong(song: string, rating = 0) {
  console.log(`${song} gets ${rating}/5 stars!`);
}

rateSong("Photograph"); // ✅ Ok
rateSong("Set Fire to the Rain", 5); // ✅ Ok
rateSong("Set Fire to the Rain", undefined); // ✅ Ok
rateSong("At Last!", "100"); // ❌ Error

📍 나머지 매개변수

function singAllTheSongs(singer: string, ...songs: string[]) {
  for (const song of songs) {
    console.log(`${song}, by ${singer}`);
  }
}

singAllTheSongs("Alicia Keys"); // ✅ Ok
singAllTheSongs("Lady Gaga", "Bad Romance", "Just Dance", "Poker Face"); // ✅ Ok
singAllTheSongs("Ella Fitzgerald", 2000); // ❌ Error