💻 Frontend
TypeScript Advanced Type
category
💻 Frontend
타입스크립트 고급 타입
- 리터럴 타입
리터럴이란 무엇일까? 코드 상에서 고정된 값을 나타내는 표기법을 말한다. 변수를 선언함과 동시에 그 값을 고정시키는 것이다.
그럼 리터럴 타입은 고정된 값을 가진 타입일 것이다!
let age:number = 1; age = 5; // OK // ----- let age:3 = 3; age = 5; // Error!
- as const
Object나 Array 내부의 프로퍼티들의 값을 literal처럼 정확히 지정할 때 사용한다.
const numbers = [1,2,3] // number[] const numbers = [1,2,3] as const // [1,2,3] if (numbers2.includes(4)) console.log("number 4 in numbers2"); //'4' 형식의 인수는 '1 | 2 | 3' 형식의 매개 변수에 할당될 수 없습니다.ts(2345) const obj = {x:1, y:2} // {x:number, y:number} const obj = {x:1, y:2} as const // {x:1, y:2}
- Union
[type1] | [type2] ⇒ type1 혹은 type2
let age: string | number = 1; age = "1";
- Generic
- 타입을 인자처럼 사용하기
- 문제 상황
데이터를 받아와 로깅을 해주고 return 해주는 함수가 있다고 해보자.
다양한 타입의 변수가 인자로 들어올 때 과연 any로 타이핑 해주는게 옳은 것일까?
function loggingAndReturn(data: any): any { console.log(data); return data; } loggingAndReturn([1]); loggingAndReturn(1); loggingAndReturn("1");
이렇게 함수호출할 때 인자의 타이핑을 넘기는 제네릭 방식을 사용하면 된다.
function loggingAndReturn<T>(data: T): T { console.log(data); return data; } loggingAndReturn<number[]>([1]); loggingAndReturn<number>(1); loggingAndReturn<string>("1");
- keyof
객체 타입에서 key들만 추출하기
type People = {name: string, age:number, gender:"male" | "female", hobby:string}; type KeyOfPeople = keyof People; // name | age | gender | hobby
- typeof
값에서 type 추출하기
const yeonuk = { name:"yeonuk", age:1, gender:"male", hobby:"climbing" }; type People = typeof yeonuk; /* { name: string; age: number; gender: string; hobby: string; } */ // 결합 type KeyOfPeople = keyof typeof yeonuk;
- narrowing
타입 범위 좁히기
function toUpper(arg:string | number){ arg.toUpperCase() // Error! /* Property 'toUpperCase' does not exist on type 'string | number'. Property 'toUpperCase' does not exist on type 'number'. */ } // narrowing function toUpper(arg:string | number){ if(typeof arg === "string"){ arg.toUpperCase() // OK! } }
타입스크립트는 왜 쓰는 것일까?
타입스크립트는 왜 쓰는 것일까? 내 생각 위주로 말해보겠다.
1학년 말, 전형적인 선배들의 프론트엔드 코스( js → react → typescript)를 따라갔었다. 그냥 남들이 쓰니까, 선배들이 그래왔으니까 사용했던 typescript.
왜 사용하는지 이유도 모르고 사용하다 보니 나의 타입스크립트 사용 반경은 한정되고 있었다.
제네릭
으로 해결할 수 있는 문제를 any
를 사용해서 해결하고, 리터럴 타입
을 사용해 더 자세한 타입을 사용할 수 있었지만 그냥 string
을 써서 해결하고 있었다. 지금 돌아보니 나는 나만의 생각이 없었던 것 같다. “남들이 다 쓰니까, 그냥 요즘 유행이니까” 이런 생각이 나의 사고 방식을 더욱 좁혀지게 되었다. 그래도 typescript를 계속 써보고, 어떠한 장점이 있는지 알게되니 그제서야 typescript를 왜 써야 하는지 알게되었다.
typescript는 javascript에서 부족한 부분들을 보완해서 코드의 안정성을 위해 사용하는구나!
그러니 typescript말고도 다른 기술, 라이브러리든 프레임워크든 내가 왜 사용하고 있는지 나만의 생각을 가지고 내가 직접 자료도 찾아보고 나만의 견해를 가지는 사람이 되자.