-
[TypeScript] TypeScript의 필수 문법 (기본 개념)IT Study/FE 2023. 7. 17. 16:37728x90
TypeScript 사용하는 이유
자바스크립트를 사용하며 접했던 모호한 에러메시지를 대신하여
타입스크립트는 엄격한 Type Rule로 인해 "에러메서지"를 친절하고 정확하게 알려줍니다.
TypeScript를 사용하기 위해 알아야하는 기본 문법에 대해 아래의 예시를 통해 알아봅시다 :)
1. Type 지정
: Type
string(소문자), number, boolean, null, undefined, bigint, [], {}
| (Union Type)
여러 타입 중 하나를 지정하고 싶을 경우 사용하는 Union Type 지정// 명시적 type 부여 let 이름: string = "Kim"; // 이름이라는 변수에 string type만 지정 가능 let 이름: string[] = ["kim", "park"]; // 이름이라는 변수에 string array type만 지정 가능 let 이름: { name: string } = { name: "kim" }; // 이름이라는 변수에 object type { name(key): string type }만 지정 가능 // 자동 type 부여 let 이름 = "Kim"; 이름 = "Three"; // Union Type let 배열: (number | string)[] = [1, "2", 3]; let 객체: { data: number | string } = { data: "1" }; 객체 = { data: 1 };
1-1. any & unknown
any와 unknown Type은 무엇이든 될 수 있는 유연한 타입입니다.
그러나 any는 TypeScript의 모든 타입 확인을 무시하므로, 실수로 인한 버그 방지를 위해서는 사용을 최소화하는 것이 좋습니다.
unknown은 타입 확인을 유지하며 어떤 타입이든 받을 수 있기 때문에, 유용하게 사용될 수 있습니다.
특징 any unknown 타입 안정성 타입 안정성 제공 X (모든 연산과 접근 허용) 타입 안정성 제공 O (타입 확인 전까지 연산과 접근 제한) 용도 사용 지양 외부 데이터(타입이 알려지지 않는 값) 다루는 데 사용 실무적 사용 여부 사용 지양 타입 안정성을 위해 any 대신 사용 2. Option 지정
?
?: option, 필수가 아닌 선택사항 지정let 이름: { name: string } = { name: "kim" }; let 이름: { name: string; age?: number } = { name: "three", age: 23 }; let 이름: { name: string; age?: number } = { name: "three"}; // obejct type 내 { age(key) } 선택사항
3. type
type
Type을 지정하는 데에 사용 (일반 변수와 구분하기 위해 시작하는 문자를 대문자로 선언합니다.)let id: string | number = "three"; // ↓ 아래와 같이 변경하여 사용 type IdType = string | number; let id: IdType = "three";
4. function: param & return
함수에서의 파라미터 및 반환값 타입 지정
Type 지정과 동일하게 :(콜론)으로 지정function multi(x: number): number { // param: number, return: number return x * 2; } // Error: '*' only apply number // function multi(x: number | string) { // return x * 2; // } function multi(x: number | string) { if (typeof x === "number") { return x * 2; } }
4-1. 반환값 타입 void
함수에서 반환값의 타입을 void로 지정할 수도 있습니다.
반환값을 void로 지정한다는 것은 return을 방지한다는 의미로 사용됩니다.
4-2. function Type 연습
아래의 문제를 보고, 스스로 코드를 작성해본 뒤 아래의 "더보기"를 클릭하여 (유사) 정답을 확인해보세요.
4-2-1. 파라미터로 이름이 들어올 때에는 "안녕하세요. 이름님."을 반환하는 함수를 작성하세요.
이름이 제공되지 않을 때에는 "이름이 없습니다." 오류 메시지를 출력하세요.
더보기function hello(name?: string) {
if (name) {
console.log("안녕하세요. " + name + "님.");
} else {
console.log("이름이 없습니다.");
}
}4-2-2. 주어진 숫자나 문자열의 길이를 반환하는 함수를 작성하세요.
더보기function count(x: string | number): number {
return x.toString().length;
}4-2-3. 월 소득, 집 보유 여부, 매력 점수를 기반으로 600점 이상이면 "결혼 가능"을 반환하는 함수를 작성하세요.
월 소득(만원 단위)은 만원 당 1점, 집 보유(true) 시에만 500점, 매력 점수("상," "중", "하")는 "상"일 때에만 100점으로 계산하세요.
600점 미만일 때에는 아무것도 return하지 않습니다.
더보기function marry(income: number, house: boolean, charm: string): string | void {
const result = income + (house ? 500 : 0) + (charm === "상" ? 100 : 0);
if (result >= 600) {
return "결혼 가능";
}
}+ "아무것도 반환하지 않는다."는 의미는 자바스크립트 혹은 타입스크립트에서 "함수가 실행을 마치고 undefined를 반환한다."는 의미와 같습니다.
5. type + 순서 지정
[array], {object}, class {}
type과 함께 순서를 지정하여 사용할 수 있습니다.5-1. [array]
type Member = [number, boolean]; let john: Member = [100, true];
5-2. {object}
type PersonObject = { firstName?: string; age: number; }; let 한슬: PersonObject = { firstName: "Kim", age: 25, }; let 한슬: PersonObject = { // firstName: option age: 25, };
5-3. class
class Person { name; // 프로퍼티: 생성자 함수에 사용할 프로퍼티 constructor(name: string) { // 생성자 함수 this.name = name; } }
😎 마무리
현재 자바스크립트와 함께 타입스크립트에 대해 독학하고 있는데요,
시간 나고 정리할 때마다 블로그 글을 꾸준히 올려보도록 하겠습니다.
정정해야 할 내용이 생긴다면 댓글 남겨주세요. 감사합니다 :)
'IT Study > FE' 카테고리의 다른 글
TypeScript 5.2의 새로운 키워드: 'using' - 자원 관리의 혁신 (0) 2023.09.18 [JavaScript] 문제를 통해 `실행 컨텍스트, 클로저, 스코프` 이해하기 (0) 2023.09.15 [Next.js/코딩애플] 프로그램 만드는 법 (feat. 코딩애플) (0) 2023.07.10 [Next.js] MongoDB의 Error: querySrv ENODATA 해결하기 (0) 2023.07.03 [Next.js/코딩애플] React에서 Next.js로의 라우팅 변화 (feat. Dynamic Route) (0) 2023.06.30