관리 메뉴

나의 개발일지(김지헌)

항해 99 50일차 11/07일 본문

항해 99

항해 99 50일차 11/07일

코딩이좋아요 2022. 11. 8. 18:01

어제 티스토리 접속이 안되어서 예비군 갔다와서 지금 씁니당.

이번 프로젝트에서 타입스크립트를 쓰고 싶어서 공부하는 내용을 적었습니다.

 

 

직접 타입을 지정할 때 
let car :String = "123" //문자열만 가능
let a :Number = 1 //숫자만 가능
let a :boolean  = true 

위의 방법 처럼 지정 해주는거 보다 타입스크립트가 타입추론을 통해서 사용하는게 가장 좋다
let  a = 1
let  b = "1"
let c = [true]
1 . 객체에서 타입을 지정 해줄 cosnt player : {name : string, age : number} = {키:벨류} 로 사용 가능 하다
                  //타입지정
const player : {name : string , age: number} = {
name : "ni", age : 12
}
2.  1의 방법대로 같은 플레이어가 엄청 많다면 코드가 길고 가독성일 떨어진다 그래서 type Player라는 인터페이스를 만든다
 -cosnt player : Player = {키:벨류}  -> 즉 type Player{} 값 안에
옵션
타입을 지정해야하는 변수 옆에 ?을 붙혀서 있을수도 있고 없을수도 있다는것을 알려줌
age? : number  => 숫자이거나 없읗수도있다.

함수

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

//playerMaker () : Player <-플레이어메이커 함수 옆에도 타입을 지정해줄 수가 있음(리턴값)
function playerMaker(name: string,): Player{ 
    return {
        name
    }
    
}
const nico = playerMaker("nico")
//playerMaker 안에는 age가 없지만 Player라는 타입을 지정해 줬으므로 age를 사용할 수 있음 
nico.age = 12

읽기전용으로 만들때 
readonly name:Name //읽기 전용으로 만든다 수정할 수 없음 map이나 filter는 사용 가능하다.

Tuple
Tuple은 array를 생성하는데 최소한의 길이가 있어야하고 특정 위치에 특정 타입이 있어야함
["name", 12, true] string number boolean

const player : [string,number,boolean] = ["nuco",1,true] 최소한 string, number, boolean의 값을 가지고 있어야함
즉 항상 정해진 갯수의 요소를 가져와야할떄 사용하면 좋음

//자바 스크립트 언어
let a : undefined = undefined
let b : null = null

any 타입스크립트에서 빠져나올때  아무타입이나 가능
any 많은 타입을 허용하지만 쓰게 된다면 타입스크립트의 보호장치를 사용할 수 없음

타입스크립트의 언어
unknown  :  타입을 모를떄 api에게 응답을 받는데 어떤 타입인지 모를떄 사용

let a:unknown
 //사용 불가능 a는 unknown으로 나온다
 let b = a + 1

//사용가능 if문 안에서는 a가 숫자이기 때문에
if(typeof a === 'number'){
 let b = a + 1
}

if(typeof a === 'string'){
    let b = a.toUpperCase()
}

void  :  아무것도 return하지 않는 함수를 대상으로 사용한다.(보통 void를 안적어줘두됨)

function hell(){
    console.log("x")
}

never  :  절대 return 하지않는거 

//리턴 하지 않고 오류 발생 시키는 코드

function hello(): naver {
throw new Error("xx")
}

function hello(name: string | number) {
 if(typeof name === "string"){
    name //string
 }else if (typeof name === "number"){
    name //number
 }else {
    name //never 작동안한다 위에서 name은 문자열 아니면 숫자로 타입을 지정해줬기 때문에
 }
}

call signature는 함수가 어떻게 구현 되는지가 아닌 인자의 타입이랑 함수의 반환 타입을 알려주는것

//즉 add함수는 Add의 타입을 알고 있다
type Add = (a:number,b:number) => number

type Add = {
 (a:number,b:number) : number
}
const add:Add = (a,b) => a+b

a가 타입이 number고 b도 타입이 number면 add는 number를 반환 하는 함수이다 라는것을 유추함
const add = (a:number,b:number) => a+b


덮어쓰기
오버로딩  :  함수가 여러개의 call signatures를 가지고 있을 때 발생 한다.
type Add = {
    (a:number,b:number) : number
    (a:number,b:string) : number
}
Add는 두개의 타입을 가지는데 a는 숫자 b는 숫자와 문자를 가지고 있고 a + b를 하게 되면 오류가 발생한다 
문자열과 숫자를 더 할려고 하기 때문에
const add:Add = (a,b) => a + b X
좋은 예시
type Config = {
    path: string,
    state: object
}
type Push = {
    (path:string):void
    (config: Config):void
}
const push:Push = (config) =>{
    if(typeof config === "string"){console.log(config)} 
    else {
        console.log(config.path)
    }
}

 polymorphism(다형성)
poly란?
- many, serveral, much, multi 등과 같은 뜻
morphos란?
- form, structure 등과 같은 뜻
polymorphos = poly + morphos = 여러 다른 구조
다형성은 무엇이지? 여러가지 모양을 가지고 형태를 가짐

제네릭  : 큰타입이 있을때 그중 하나가 달라질수 있을때 제네릭을 사용

'항해 99' 카테고리의 다른 글

항해 99 52일차 11/09일  (1) 2022.11.10
항해 99 51일차 11/08일  (0) 2022.11.08
항해 99 49일차 11/06일  (0) 2022.11.07
항해 99 48일차 11/05일  (0) 2022.11.06
항해 99 47일차 11/04일  (0) 2022.11.05