타입스크립트의 주요 기본 타입 10가지에 대해서 예제 코드와 함께 설명한다.
number: 숫자타입
let age: number = 30;
let price: number = 9.99;
let hex: number = 0xff; // 255
- 정수, 부동소수점, 2진수, 16진수 모두 포함
NaN
도 number 타입으로 취급
string: 문자열 타입
let name: string = "nyaong";
let sentence: string= `hello, ${name}!`; // 템플릿 리터럴
- 작은따옴표('), 큰따옴표("), 백틱(``) 모두 사용 가능
undefined & null
let u: undefined = undefined;
let n: null = null;
undefined
: 값이 할당되지 않은 변수null
: 의도적으로 빈 값 할당- 주의:
strictNullChecks
옵션 활성화 시 다른 타입에 할당 불가
any: 모든 타입 허용⚠️
let dynamicValue: any = "문자열";
dynamicValue = 42; // 가능
dynamicValue = true; // 가능
- 타입 검사 무시 (최후의 수단으로만 사용 권장)
- 타입스크립트의 장점을 무효화하므로 남용 금지
웬만하면 사용하지 말기!!
💩
unknown: 안전한 any
let userInput: unknown = "안녕하세요";
if (typeof userInput === "string") {
let text: string = userInput; // 타입 검사 후 사용
}
- any처럼 모든 값 허용하지만 타입 검사 필수
- 타입 가드(
typeof
, instanceof
)와 함께 사용
void: 반환값이 없는 함수
function logMessage(message: string): void {
console.log(message);
}
- 주로 함수 반환 타입으로 사용
- 변수에 사용시
undefined
만 할당 가능 (단, strictNullChecks
활성화시)
never: 절대 발생하지 않는 값
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while(true) {}
}
- 함수가 절대 반환되지 않음을 명시
- 모든 타입의 하위 타입 (모든 타입에 할당 가능)
object: 객체타입
let user: object = {
name: "Bob",
age: 25
};
// 더 구체적인 타입 정의 추천
type User = {
name: string;
age: number;
};
let betterUser: User = {
name: "Bob",
age: 25
};
- 객체의 구조를 명시할 때는 인터페이스나 타입 별칭 사용 권장
{}
보다 구체적인 타입 정의가 더 안전함
배열(Array)과 튜플(Typle)
// 배열
let numbers: number[] = [1, 2, 3];
let names: Array<string> = ["Alice", "Bob"];
// 튜플
let person: [string, number] = ["Alice", 30]; // 정해진 순서의 타입
🛑 타입 추론(Type Inference)
let message = "Hello"; // 자동으로 string 타입 추론
message = 123; // ❌ Error: Type 'number' is not assignable to type 'string'
- 명시적 타입 선언 없어도 자동으로 타입을 추론
: type
표기는 필요한 경우에만 사용
📌 요약 표
타입 |
설명 |
사용 예시 |
number |
모든 숫자 형태 |
let count: number = 42 |
string |
문자열 |
let name: string = "Alice" |
boolean |
true/false |
let isDone: boolean = true |
null |
의도적인 빈 값 |
let n: null = null |
undefined |
할당되지 않은 값 |
let u: undefined |
any |
모든 타입 허용 (위험) |
let dynamic: any = "text" |
unknown |
타입 검사 필요한 모든 타입 |
let notSure: unknown = 10 |
void |
반환값 없는 함수 |
function log(): void {} |
never |
절대 반환되지 않는 함수 |
function error(): never {} |
object |
객체 (구체적 정의 추천) |
let obj: object = {} |
댓글