FrontEnd/Type Script
타입스크립트 복습하기
펭긴킴
2024. 4. 25. 12:19
//리턴 타입을 지정해주지 않아도 타입스크립트가 추론해준다
function add (a:number, b:number){
return console.log(a+b);
}
//같은 로직의 arrow
const addArrow = (a:number, b:number) =>{
return console.log(a+b);
}
addArrow(1,3);
//numberType 이라는 타입을 만들어 지정
//이렇게 쓰면 다른데에서도 쉽게쓸수있지않을까 ?
type numberType = (a:number, b:number) => number;
//인자 이름은 어차피 그냥 이름이라 바뀌어도 상관없다.
const useAdd : numberType = ( a, b ) =>{return (a+b) };
const useMinus : numberType = ( c, d ) =>{return (c-d)};
//pick. omit 알아보기
//OverLoading : 하나의 함수가 복수의 콜 시그니쳐를 가졌을때 발생
//타입 지정에서 콜 시그니쳐가 두개임
type AddOverLoading = {
(a: number, b: number) : number,
(a: number, b: number, c:number) :number
}
//c 를 선택사항 (?) 으로 두고 그에 대한 로직을 if 문으로 짜줌
const addOver : AddOverLoading = (a, b, c?:number)=>{
if(c) return a+b+c;
return a+b;
}
//다형성(영어는 알아서찾아보기)
//제네릭 쓸때 보통쓰는 알파벳
/**
* T : type : 그냥타입 (...)
* V : value : 객체의 값 타입
* K : key : 객체의 키값
* E : enum (요소) : 열거형의 각 항목을 나타내는데 사용
*
*/
type SuperPrint = {
//타입을 내가 일일히 경우의 수를 따지지않고 지정하는게아니고, TS의 타입 추론을 이용해서 사용한다.
//<> : 제네릭 안에 쓰고 싶은 이름을 넣어서 사용한다 (통상적으로 T나 V를 쓴다)
// (arr : number[]) : void,
// (arr : string[]) : void,
// (arr : boolean[]) : void, .... 경우의 수를 모두 생각해야하지만 ===
//밑의 한줄로 끝낼수있다
<T> (arr:T[]) :void,
}
const superPrint:SuperPrint = (arr) =>{
arr.forEach(index => console.log(index));
}
superPrint([1,2,3]); //number 여도 가능
superPrint(["1","2","3"]); //string 이여도 가능
superPrint([true, false]); //boolean 이여도 가능
superPrint([]);//빈 배열이여도 가능 ^^ (never로 지정된다)
//하여튼 TS가 추론하게 해주는게 제네릭 타입 -> 다형성을 이용하는 것 이다.
//any는 타입추론을 하지않고 넘긴다 (일반 바닐라js쓰는거랑 같은거아닐까?)
//타입은 추론해주지만 인수의 갯수 는 추론해주지 않는다 (따로 명시해줘야함)
//추론을 하게해줄수도 있지만, 지정도해줄수있다
superPrint<string>(["안녕","하세요","김펭귄"]);
//타입 넣고 넣어보기
type Player<T>={
name:string,
//extraInfo가 있을수도있고 없을수도있다
extraInfo: T,
}
type ExtraFood = {
favFood: string,
};
type PenguinPlayer = Player<ExtraFood>;
const penguin : PenguinPlayer ={
name:"HeeJun",
extraInfo: {
favFood:"cake",
}
}
// extraInfo 가 없을시에 제네릭에 null을 붙여준다
const heejun :Player<null> ={
name: "Heejun",
extraInfo: null,
}
// const [phoneNumber, setPhoneNumber] = useState<number>(1);