#2.2. Types of TS

해피데빙·2022년 7월 15일
0

Typescript

목록 보기
6/9
  • 선택적 타입
  • Alias 타입
  • argument 타입
  • return 타입
  • readonly
  • tuple
  • undefined, null
  • any
  • void
  • unknown : 알 수 없는 타입, 확인 필요
  • never : 예외, 리턴 값이 없는 함수에서

기본 타입

숫자, 문자열, 불리언
let a : number =1; 
let b : string = "il"; 
let c : boolean = true; 

배열
let a : number[] =[1]; 
let b : string[] = ["il"]; 
let c : boolean[] = [true]; 

키워드 변수 : 타입이름 = 값
암묵적으로 써도 됨
키워드 변수 = 값

optional 타입

1. 객체에 타입 정해주기
const player _: object_ = {
	name: "nico"
}

- object라고 설정해주면 player.name에 접근할 수 없다 
- 무조건 name이 있지만 age는 있을 수도 있는 객체를 만들고 싶을 때 

const player : { 
	name : string, 
    age?: number //age는 optional 
} = { 
	name : "nico"
}

if(player.age <10){ } //Object is possibly 'undefined' 
if(player.age && player.age <10){ } //이러면 된다 

2. 여러 객체를 같은 포맷으로 만들어주고 싶을 때 : alias 타입을 만들어준다 (별명)
- 객체 외에 다른 타입도 얼마든지 만들어줄 수 있다

type Player = {
	name:string, 
    age?:number
}

const Nico : Player = { 
	name: "nico"
}

const Lynn : Player = { 
	name: "lynn", 
    age: 12
}


type Age = number; 
type Name = string;

type Player ={
	name: Name, 
    age?:Age
}


3. 함수의 리턴값의 타입을 지정하는 방법
- 매개변수 

function playerMaker(name: string){
	return { 
    	name
    } 
}

const nico = playerMaker('nico')  //정해진 타입의 매개변수가 필수가 된다 
nico.age = 12 //error : name이라는 속성만 정의해놓아서



function playerMaker(name: string): Player { //반환 값이 Player
	return { 
    	name
    } 
}

const playerMaker = (name:string):Player => ({name})

const nico = playerMaker('nico') //이 함수가 Player 타입이라는 것을 안다 
nico.age = 12 //이제 가능

string 타입으로 name을 받고 Player 타입을 return하는 함수로

정리

기본

키워드 + 변수 : 타입 = 값 [명시]
키워드 + 변수 : 타입[] = 값 [배열]

객체 : optional

키워드 + 변수 = {
키 : 값,
키? : 값 //optional
}

Alias : 코드 재사용

type + Alias = { name : string, age? : number }
let 변수명 : Alias = 값

함수

매개변수, 리턴 값에 타입 명시
function functionName(name : string) : Player{
return {
name
}//이렇게 해도 나중에 이 값에 대해 Player의 키에 대한 값을 넣을 수 있다
}

ReadOnly 속성

자바스크립트는 없는 기능
자바스크립트로 변환된 다음에는 추가, 변경 가능

type Player = {
	readonly name:Name
    age?:Age
}
nico.name = "las" //error: readonly라서 변경 불가능 


const numbers: readonly number[] = [1,2,3,4]
nymbers.push(1)//error, readonly니까 

const names: readyonly string[] = ["1","2"]
names.push(), map() 등을 모두할 수 없다 

Tuple

Tuple

  • array를 생성할 수 있다
  • 최소한의 길이를 가져야 하고 (정해진 개수 조건을 충족해야 한다)
  • 특정 위치에 특정 타입이 있어야 한다
  • 자바스크립트에는 없으므로 변환 후에는 사용 불가능
const player: [string, number, boolean] = []//아래 이미지의 에러가 뜬다
player[0]=1//number 타입이 첫번째 자리에 들어갈 수 없다고 뜬다

const player: readonly [string, number, boolean] = ['nico',1,true]
//아예 변경 불가

undefined, null, any

undefined, null, any

  • any : 타입스크립트를 사용하지만 아무 타입이나 다 쓰고 싶으면 사용하는 것
  • 하지만 타입스크립트를 쓰는 의미가 없으므로 비추천
let a : undefined = undefined 
let b : null = null 

선택적 타입을 쓰면 정해진 타입이 아니면 undefinedrk ehlsek 

let c : any[] = [1,2,3,4]
let d : any = true 
//c+d가 가능해진다 

자바스크립트에서 사용하지 않는 타입

  • typescript의 type checker와의 소통을 돕는다
  • unknown : 어떤 타입인지 모르는 변수가 있을 때
    - 타입 체크를 수동으로 하도록 만든다
    • 체크 확인 전에는 아무것도 할 수 없도록 한다
let a : unknown; //Typescript로부터 일종의 보호를 받는다
let b = a+1// 할 수 없다. unknown이니까 확인하기 전에는 조작 불가능 
if(typeof a === 'number'){//이렇게 확인을 하는 과정을 직접 만들어줘야 한다 
	let b = a+1;
}

if(typeof a === 'string'){//이렇게 확인을 하는 과정을 직접 만들어줘야 한다 
	let b = a.toUpperCase(); 
}
  • void : 아무것도 리턴하지 않는 함수
function hello(){ //암묵적으로 타입 확인  - function hello(): void
	console.log('x')
}

function hello():void{ //명시해도 되지만 필요 없음
	console.log('x')
}

const a = hello(); 
a.toUpperCase(); //void니까 안된다고 나온다
  • never
    - 리턴하지 않는 함수, 예외가 발생할 때 사용
    • 타입이 두가지 일 수도 있는 상황에서 발생
function hello():never{ 
	return "X" //아무것도 리턴 X
} 

function hello():never{ 
	throw new Error("xxx")//리턴하지 않고 오류를 발생시키는 함수
}

fucntion hello(name: string | number){ 
	name +1 //불가능, number일 수도 있으니까 
    
    if(typeof name === "string"){ 
    
    	name //string
        
	}else if(typeof name === "number"){ 
    
    	name //number
        
	}else{ 	
    
    	name // type:never (이 경우는 발생할 수 없으니까)
        
	}
}

profile
노션 : https://garrulous-gander-3f2.notion.site/c488d337791c4c4cb6d93cb9fcc26f17

0개의 댓글