1.1 Node.js 패키지를 초기화
npm init
1.2 @types/node 패키지를 설치
: (Node.js의 내장 기능(함수 및 클래스)에 대한 타입 선언을 제공하는 패키지)
npm init
1.3 컴파일러 옵션 파일을 생성하고 옵션을 설정 tsconfig.json
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"outDir": "dist",
"strict": true,
"moduleDetection": "force"
},
"ts-node": {
"esm": true
},
"include": ["src"]
}
타입스크립트가 자체적으로 제공하는 타입
동시에 한개의 값만 저장할 수 있는 타입
2.1.1 number
소수, 음수, Infinity, NaN등의 특수한 숫자들도 포함// number
let num1: number = 123;
let num2: number = -123;
let num3: number = 0.123;
let num4: number = -0.123;
let num5: number = Infinity;
let num6: number = -Infinity;
let num7: number = NaN;
num1 = 'hello'; // ❌
num1.toUpperCase(); // ❌
2.1.2 string
// string
let str1: string = "hello";
let str2: string = 'hello';
let str3: string = `hello`;
let str4: string = `hello ${str1}`;
2.1.3 boolean
true 또는 false만 이 타입에 해당// boolean
let bool1 : boolean = true;
let bool2 : boolean = false;
2.1.4 null
// null
let null1: null = null;
null을 넣는 것은 불가능하다let numA: number = null; // ❌
tsconfig.json의 strcitNullChecks(엄격한 null 검사) 옵션을 false로 설정시 가능하다.2.1.5 undefined
// undefined 타입
let unde1: undefined = undefined;
2.1.6 리터럴 타입
let numA: 10 = 10;
let strA: "hello" = "hello";
let boolA: true = true;
let boolB: false = false;
2.2.1 배열
배열 타입을 정의
let numArr: number[] = [1, 2, 3]
let strArr: string[] = ["hello", "im", "winterlood"];
let boolArr: Array<boolean> = [true, false, true]; // 제네릭 활용
| 유니온(Union) 연산자를 이용let multiArr: (number | string)[] = [1, "hello"];
let doubleArr : number[][] = [
[1, 2, 3],
[4, 5],
];
2.2.2 튜플
tsc를 이용해 컴파일 시 배열로 변환된다. let tup1: [number, number] = [1, 2];
let tup2: [number, string, boolean] = [1, "hello", true];
객체 타입을 정의하는 방법은 2가지가 있다.
object 로 정의하기객체 리터럴 타입으로 정의하기2.3.1 object 로 정의하기
let user: object = {
id: 1,
name: "박창조",
};
object로 객체를 정의하면, 점 표기법으로 특정 프로퍼티에 접근하려고 하면 오류가 발생한다.object 타입은 단순 값이 객체임을 표현하는 것 외에는 아무런 정보도 제공하지 않는 타입이기 때문!2.3.2 객체 리터럴 타입으로 정의하기
let user: {
id: number;
name: string;
} = {
id: 1,
name: "박창조",
};
user.id;
객체의 타입을 정의할 때에는 object 보다는 객체 리터럴 타입을 사용하는게 좋다!
2.3.3 선택적 프로퍼티(Optional Property)
? 를 붙여준다!let user: {
id?: number; // 선택적 프로퍼티가 된 id
name: string;
} = {
id: 1,
name: "박창조",
};
user = {
name: "홍길동",
};
2.3.4 읽기전용 프로퍼티(Readonly Property)
readonly 키워드를 붙인다.2.4.1 타입 별칭(Type Alias)
type 타입_이름 = 타입 형태로 타입을 정의// 타입 별칭
type User = {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string;
};
let user: User = {
id: 1,
name: "박창조",
nickname: "Creation",
birth: "1998.12.02",
bio: "안녕하세요",
location: "용산구",
};
2.4.2 인덱스 시그니처(Index Signature)
인덱스 시그니쳐는 객체 타입을 유연하게 정의할 수 있도록 돕는 특수한 문법
type CountryNumberCodes = {
[key: string]: number;
};
자바스크립트에는 존재하지 않고 오직 타입스크립트에서만 사용할 수 있는 특별한 타입
enum Role {
ADMIN = 0,
USER = 1,
GUEST = 2,
}
const user1 = {
name: "박창조",
role: Role.ADMIN, //관리자 -> 0 할당
};
const user2 = {
name: "홍길동",
role: Role.USER, // 회원 -> 1 할당
};
const user3 = {
name: "아무개",
role: Role.GUEST, // 게스트 -> 2 할당
};
// tsc로 변환 시
var Role;
(function (Role) {
Role[Role["ADMIN"] = 0] = "ADMIN";
Role[Role["USER"] = 1] = "USER";
Role[Role["GUEST"] = 2] = "GUEST";
})(Role || (Role = {}));
2.6.1 any
타입스크립트에서만 제공되는 특별한 타입으로 타입 검사를 받지 않는 특수한 치트키 타입
let anyVar: any = 10;
anyVar = "hello";
let num: number = 10;
num = anyVar;
any 타입은 최대한 사용하면 안된다.2.6.2 unknown
any 타입과 비슷하지만 보다 안전한 타입
let num: number = 10;
(...)
let unknownVar: unknown;
unknownVar = "";
unknownVar = 1;
unknownVar = () => {};
num = unknownVar; // 오류 !
2.7.1 void
아무런 값도 없음을 의미하는 타입
function func2(): void {
console.log("hello");
}
void타입을 지정할 수 있지만, void 타입의 변수에는 undefined 이외의 다른 타입의 값은 담을 수 없void 타입이 undefined 타입을 포함하는 타입이기 때문let a: void;
a = undefined;
2.7.2 never
불가능을 의미하는 타입
함수가 어떠한 값도 반환할 수 없는 상황일 때 해당 함수의 반환값 타입을 정의할 때 사용
function func4(): never {
throw new Error();
}
let anyVar: any;
(...)
let a: never;
a = 1;
a = null;
a = undefined;
a = anyVar;