object에서 name은 필수, age는 옵션으로 지정하고 싶다면?
?를 붙여준다.const player : {
name: string,
age?: number,
} = {
name : "jini"
}
if(player.age && player.age < 20){
~~
}

여기서 만약 player1, player2, player3 ...으로 동일한 형태의 object를 만든다면 코드는 지저분해진다.
이 경우에는 Alias(별칭) 타입을 생성할 수 있다.
type Name = string;
type Age = number; //이런식으로도 재사용할 수 있지만 과한 재사용은 지양하자
type Player = {
name: Name,
age?: Age,
}
const jini: Player = {
name : "jini"
}
const mimi: Player = {
name : "mimi",
age: 22
}
type Name = string;
type Age = number;
type Player = {
name: Name,
age?: Age,
}
1. 일반 함수
function playerMaker(name:string) : Player {
return {
name //name:name과 동일함
}
}
2. 화살표 함수
const playerMaker = (name:string) : Player
=> ({name})
const jini = playerMaker("jini")
jini.age = 12

function playerMaker(name:string){} - argument(인자)타입지정
function playerMaker(name:string) : Player {} - 함수 return값의 타입 지정
이렇게 지정하게되면 TypeScript는


예시

readonly number[]타입으로 지정하고나서 numbers에 push를 하려고하면 에러남.readonly number[]타입에 존재하지 않기 때문에 허용해주지 않음.
const numbers: readonly number[] = [1, 2, 3, 4]
numbers.push(5)
예시
const player: [ string, number, boolean ] = ["jini", 12, false]
const player: readonly [ string, number, boolean ] = ["jini", 12, false]
비어있는 값들을 쓰면 기본값이 any가 됨

any는 TypeScript로부터 빠져나오고 싶을 때 쓰는 타입(가~끔은 any를 사용해야될 때가 있다.)
TypeScript로부터의 보호장치를 잃어버리고, JavaScript에 있는다고 생각하면 됨.
아래와 같이 TypeScript 라면 에러가 났을 코드를 작성해도 에러나지 않게됨
const a : any[] = [1, 2, 3, 4]
const b : any = true
a + b
let a:unknown;
let b = a + 1;

let a:unknown;
if(typeof a === 'number'){
let b = a + 1
}
if(typeof a === 'string'){
let b = a.toUpperCase();
}

function hello(): never{
return "X"
}

function hello(): never{
throw new Error("X")
}
throw new Error("X")는 "X"라는 메시지를 가진 새로운 예외 객체를 생성하고, 이를 발생시키는 역할. 이 때 발생시킨 예외는 해당 함수가 실행 중이거나 해당 함수를 호출한 부분에 의해 '잡히지' 않으면, 프로그램 실행을 중단시키고 상위 호출 스택에 있는 예외 처리 코드로 제어가 전달.
예외 처리는 프로그램 안정성을 유지하고 예외 상황에 대응하기 위해 사용. 상황에 따라 예외를 적절히 처리하거나, 프로그램이 비정상적인 상황에서도 graceful하게 종료될 수 있도록 도와준다.
else{name} 가 발생하면 잘못 받아오고 있는 뜻이다.(발생되면 큰일!!)function hello(name:string|number){
if(typeof name === "string"){ //여기서 name은 string이 됨
name.toUpperCase();
}else if(typeof name === "number"){ //여기서 name은 number가 됨
name + 1
}else{ //여기서 name은 never가 됨
name
}
}