1)Type Alias(타입별칭)
타입스크립트에서는 개발자 정의 타입을 정의해서 새로운 타입을 만들어 사용할수도 있습니다.
type키워들을 이용해 새로운 타입을 정의하고 변수나 객체,함수등에 적용가능합니다. 

D:\TypeScript\2-TS-Basic 폴더내에 type-alias.ts파일을 생성 합니다.

A)Type Alias 예시코드 코딩하고 실행하기
-하기 코드와 같이 코딩을 진행합니다.
-자세한 내용은 주석을 참고바랍니다.
-type-alias.ts

//Case1)타입 별칭을 사용하여 두가지 타입을 지원하는 새로운 타입을 정의합니다.
type StringOrNumber = string | number;
let sample: StringOrNumber;
sample = "hello";
console.log("sample:", sample);

sample = 123;
console.log("sample:", sample);

//Case2)복잡한 타입도 별칭으로 정의할 수 있습니다.
//MemberType 타입 별칭 구조와 속성 타입을 정의합니다.
type MemberType = {
  name: string;
  age: number;
  address: { city: string; country: string };
};

//해당 MemberType 타입의 변수를 선언하고 값을 할당합니다.
let personData: MemberType = {
  name: "John Doe",
  age: 25,
  address: {
    city: "Seoul",
    country: "South Korea",
  },
};

//특정함수에 파라메터로
function printPersonInfo(person: MemberType) {
  console.log(
    `name: ${person.name}, age: ${person.age}, address: ${person.address.city}, ${person.address.country}`
  );
}

printPersonInfo(personData);

//Case3)함수의 구조를 타입으로 정의하기
//마이너스함수를 타입으로 minusFunc 타입으로 정의함
//calFunc()함수의 구조를 타입으로 정의한다.
//type 함수타입명 =(파라메터)=>반환값타입
type calFuncType = (a: number, b: number) => number;

function plus(a: number, b: number) {
  return a + b;
}

function minus(a: number, b: number): number {
  return a - b;
}

//함수의 파라메터로 특정함수를 전달할때는 전달 함수의 파라메터명:(함수 파라메터명:타입,파라메터명:타입) => 함수반환타입 형식으로 정의
//calculate()함수에 파라메터(인수)로 전달되는 함수의 파라메터명과 타입,반환값을 어떻게 정의하는지 확인하세요.
//여러개의 기초함수를 만들어두고 해당 기초함수의 공통함수타입을 정의후 특정함수에 파라메터로 전달해 하나의 함수를 통해 선택적으로 매개변수함수를 실행할수있다.
function calculate(a: number, b: number, calFunc: calFuncType): number {
  return calFunc(a, b);
}

//calculate함수에 plus,minus 함수를 파라메터로 전달해 해당 전달함수의 로직으로 계산을 수행하게 하는 예시
console.log(calculate(10, 5, plus));
console.log(calculate(10, 5, minus));

//CaSe4: 함수 파라메터인수와 반환값을 위한 type 정의
type OperationInput = {
  a: number;
  b: number;
};

type OperationOutput = {
  result: number;
};

// 함수 구현
function addNumbers(input: OperationInput): OperationOutput {
  const { a, b } = input;
  return { result: a + b };
}

// 사용 예시
const input: OperationInput = { a: 5, b: 3 };
const output: OperationOutput = addNumbers(input);
console.log(output); // { result: 8 }

//tsc --strictNullChecks type-alias.ts
//node type-alias.js


-코딩을 모두 진행 저장하고 아래 명령어를 통해 터미널창에서 ts파일을 컴파일하고 컴파일 결과.js파일을 실행합니다.
D:\TypeScript\2-TS-Basic
tsc --strictNullChecks type-alias.ts
node type-alias.js

B)코딩 핵심 내용 설명
-단일 타입에 여러 타입지원을 위해 Union을 통해 정의할수 있습니다.
-복잡한 객체의 구조도 별도 타입으로 정의할수 있습니다.
-함수의 구조도 타입으로 정의해서 사용할수 있습니다.
-자바스크립트 함수는 함수의 매개변수로 특정함수를 전달할수 있다.
-함수의 매개변수로 전달되는 함수의 타입을 함수타입으로 정의해 사용할수 있다