[TypeScript] TypeScript 타입별 정리
타입스크립트는 일반 변수, 객체 속성, 매개변수 등 다양하게 선언할 수 있습니다.
Type 선언
▶ Number(숫자)
: 모든 숫자를 지원하는 type 입니다.
부동 소수점은 number 타입이지만, Big Interger는 bigint type 입니다.
const decimal: number = 6;
const hex: number = 0xf00d;
const binary: number = 0b1010;
const octal: number = 0o744;
const big: bigint = 100n;
▶ String (문자열)
: 문자열을 나타내며, 작은 따옴표(') or 큰 따옴표(")를 사용해서 문자열 데이터를 감쌉니다.
ES6의 문자열도 지원합니다.
let os: string = "linux";
os = 'window';
let myOs: string = `My computer OS is ${os}`;
▶ Boolean (불리언)
: True or False 값을 나타내는 type 입니다.
let isDel: boolean = false;
▶ Array (배열)
: 순차적인 값을 갖는 배열을 나타냅니다.
아래와 같이 배열을 2가지로 선언할 수 있습니다.
// 문자열과 숫자만 배열 값에 들어갈 수 있음.
let array1: (string | number)[] = ["red", 5, 7, "blue", "yellow", 7, "black"];
let array2: Array<string | number> = [9, "blue", 1, 9, "red", "yellow", 8];
// 배열의 값들을 단언할 수 없다면, any를 사용합니다.
let someArr: any[] = [9, [], {}, [], "black", ture, false];
+ readonly, ReadonlyArray타입을 사용해서 읽기 전용 배열도 생성 가능합니다.
아래 예시는 읽기전용이기에 값을 변경(쓰기)를 하려면 에러가 발생 합니다.
let array1: readonly string[] = ["one", "two"];
let array2: ReadonlyArray<number> = [1, 2, 3, 4];
// ERROR
array2[0] = 6;
▶ Tuple (튜플)
: 정해진 타입의 고정된 길이를 가지는 배열을 표현할 수 있습니다.
// Declare a tuple type
let x: [string, number];
x = ["red", 21]; // OK
x = [21, "red"]; // Error
console.log(x[0].substring(1)); // OK
console.log(x[1].substring(1)); // ERROR
▶ Enum (열거형)
: enum은 enumerated type을 의미합니다.
열거형은 관련 값 모음을 구성하는 방법이며 값들의 집합을 명명하고 사용할 수 있게 합니다.
값의 종류가 일정한 범위로 정해져있는 경우에 유용합니다.
enum Os {
window = 1,
linux = 2,
macOS = 3,
}
let temp: Os = Os.window; // 1
▶ any (모든 타입 허용)
: 외부 라이브러리를 사용하다보면 타입을 모두 알수가 없는 경우가 있습니다.
단언하기 힘들때 any를 사용하여 타입 검사를 모두 무시할 수 있지만, 권장하지 않습니다.
+ 타입스크립트에서 any사용을 금지하기 위해서는 컴파일 옵션에 "nolmplicitAny": true로 세팅하면
any사용시에 에러가 발생합니다.
let temp: any = 777;
temp = null;
temp = 'one';
temp = {};
▶ Object (객체)
: typeof 연산자가 Object로 반환하는 모든 타입을 나타냅니다.
컴파일러 옵션에서 "strict" = true 로 설정하면 null 은 포함하지 않습니다.
let obj: object = {};
let arr: object = [];
let func: object = function () {};
let date: object = new Date();
// object에서 반복적인 사용을 할 경우 인터페이스나 타입으로 사용할 수 있습니다.
interface Person {
name: string,
age: number
}
let person1: Person = {
name: 'sam',
age: 21
};
let person2: Users = {
name: 'young',
age: 32,
mail: true // Error
}
▶ UnKnown (알수 없는 타입)
: any와 같은 최상위 type으로 알 수 없는 type 입니다.
어떤 타입의 값도 할당할 수 있지만, unknown을 다른 type에 할당할 수는 없습니다.
단, any와 unknown은 서로 할당 가능합니다.
let temp: unknown = 123;
let test1: number = temp; // ERROR
let test2: number = temp as number; //타입을 선언하면 할당할 수 있다.
let test3: any = temp;
▶ Null & Undefined
: 모든 타입의 하위 타입으로, 여러 타입들에 할당할 수 있습니다.
+ 컴파일 옵션에서 "strictNullChecks": true 를 통해 null 과 undefined 타입을 할당 할 수 없도록 하는 것이 가능합니다.
단, void 에는 undefined 할당이 가능합니다.
let num: number = undefined;
let str: string = null;
let obj: { a: 1, b: false } = undefined;
let arr: any[] = null;
let und: undefined = null;
let nul: null = undefined;
let voi: void = null;
▶ void
: 값을 반환하지 않는 함수에서 사욯합니다.
함수가 반환 타입을 명시하는 곳입니다.
function testFunction(msg: string): void {
console.log(`message : ${msg}`);
}
▶ Never
: 절대 발생하지 않을 값을 나타내며 어떤 타입에도 적용할 수 없습니다.
any에도 불가능하며, 항상 예외를 throw하는 함수, error를 return하는 함수등에 반환 type 입니다.
// Function returning never must not have a reachable end point
function errorFunction(message: string): never {
throw new Error(message);
}
// Inferred return type is never
function failFunction() {
return error("failed");
}
// Function returning never must not have a reachable end point
function infiniteLoop(): never {
while (true) {}
}
▶ Union (유니언)
: 2개 이상의 타입을 허용하는 경우에 유니언이라고 합니다.
"|" 키워드를 사용해서 type을 구분합니다.
let temp: (string | number);
temp = 1234;
temp = 'Hello World';
Ref : https://choidr.tistory.com/entry/TypeScript-%ED%83%80%EC%9E%85-%EC%A0%95%EB%A6%AC