리터럴 타입
: 특정 값을 나타내는 타입으로 해당 값이 정확하게 일치해야 함 / 다양한 종류가 있음
interface Student {
stdId: number;
stdName?: string;
age?: number;
gender?: "male" | "female";
course?: string;
completed?: boolean;
setName: (name: string) => void;
getName?: () => string;
}
class MyStudent implements Student {
stdId = 777;
stdName = "lee";
age = 30;
gender: "male" | "female" = "male";
course = "node.js";
completed = true;
setName(name: string): void {
this.stdName = name;
console.log("이름 설정 : " + this.stdName);
}
}
let std = {
stdId: 5555,
stdName: "lee",
age: 30,
gender: "female",
course: "node.js",
completed: true,
};
리터럴 타입 장점
- 가독성이 높아짐
- 잘못된 값이 들어오는 것을 방지
const user: { name: string; age: number } = {
name: "john",
age: 25,
};
- 지정한 타입에 맞지 않은 값이 들어오면 오류
- 예) age에 '35'와 같은 문자열이 들어오면 오류
any 타입
: 어떤 타입이든 ok (아무값이나 대입 가능)
: 가급적 피하는 게 좋음
: 그럼 왜 사용? -> 타입 명시가 애매한 경우 (동적 할당)
any 타입
- 타입에 관한 정보가 더 많을 수록 좋음
- 타입정보는 개발자의 의도를 명확하게 전달 가능
- 효과적인 코드의 유지보수가 가능
- any 타입을 일부러 사용하지 말자
- 타입을 지정할 수 없는 제한적인 경우에만 any 타입을 사용하자
유니온 타입
: 공용체 - 가장 큰 데이터를 기준으로 메모리 공유
: 이것도 사용자 정의 타입!
: 제한된 타입을 동시에 지정하고 싶을 때
: | 기호를 사이에 두고 동시에 타입 지정
- 유니온 사용해보기
let numStr: number | string = 100;
function convertTostring(val: number | string): string {
return String(val); // 값을 string으로 변환
}
function convertToNumber(val: number | string): number {
return Number(100); // 값을 number로 변환
}
console.log(convertTostring(numStr));
console.log(convertToNumber(numStr));
- 같은 타입을 반복해서 사용할 경우 -> 타입 별칭
type 키워드 사용
즉, 반복되는 코드 재사용 (타입 재정의)
- 타입 가드
: 유니온 타입을 사용할 경우 typeof를 사용해 코드를 검증
: 타입 검증
type strOrNum = number | string;
let numStr: strOrNum = "100";
let item: number;
function convertTostring(val: strOrNum): string {
// item = val; -> 오류
//typeof operator
if (typeof val === "string") {
item = 0;
} else {
item = val;
}
return String(val); // 값을 string으로 변환
}
function convertToNumber(val: strOrNum): number {
return Number(100); // 값을 number로 변환
}
console.log(convertTostring(numStr));
console.log(convertToNumber(numStr));
Array와 Tuple의 차이점
- 배열은 길이가 가변적이며 동일한 타입의 요소로 구성
- 튜플은 길이가 고정적이며 각 요소의 타입이 정해져 있음
//배열
var numbers = [1, 2, 3, 4, 5];
var fruits = ["apple", "banana", "orange"];
for (var i = 0; i < numbers.length; i++) {
console.log(numbers[i]);
}
for (var i = 0; i < fruits.length; i++) {
console.log(fruits[i]);
}
//튜플 : 타입의 순서가 정해져 있다.
let greeting: [number, string, boolean] = [1, "hello", true];
for (let i = 0; i < greeting.length; i++) {
console.log(greeting[i]);
}
Spread 연산자
... 키워드 사용 -> 배열의 괄호를 벗겨줌
//Spread 연산자
let firstArray = [1, 2, 3];
let secondArray = [4, 5, 6];
let conbineArray = [...firstArray, ...secondArray];
for (let i = 0; i < conbineArray.length; i++) {
console.log(conbineArray[i]);
}
'데브코스 > 강의 정리' 카테고리의 다른 글
리액트란 / 초기설정 / 기본 코드 분석 (0) | 2024.10.30 |
---|---|
클래스와 객체, 생성자, 접근지정자, getter와 setter (0) | 2024.10.29 |
오버로딩, 오버라이딩, 인터페이스, 람다 (2) | 2024.10.28 |
객체 지향, 추상화, 캡슐화, 클래스, 생성자, 상속성 (0) | 2024.10.28 |
함수 포인터, 구조체, 열거형, 동적 메모리 할당 (0) | 2024.10.28 |