2024.01.29(월)
자바스크립트 확장판 ⇒ 자바스크립트 + 타입체크
npm install -g typescript
tsc filename.ts
로 컴파일 (tsc는 typescript compiler의 약자)tsc --init
→ tsconfig.json
생성tsc -w filename.ts
로 파일이 변경될 때마다 자동으로 compile 진행 (w는 watchdog의 약자)let age = 30; // age의 변수 타입을 자동으로 number로 추론
number
, string
, boolean
, null
, undefined
object
: 객체를 나타내는 타입array
: 동일한 타입의 요소를 가진 배열을 나타내는 타입tuple
: 각 요소가 다른 타입을 가질 수 있는 배열을 나타내는 타입any
: 어떠한 타입이든 할당될 수 있는 타입unknown
: 타입을 미리 알 수 없는 경우 사용되는 타입let age: number = 20;
age = '30'; // error TS2322: Type 'string' is not assignable to type 'number'.
// 변수의 데이터 타입 명시
let age: number = 20;
let myName: string = "hwang";
let course: string = "typescript";
let completed: boolean = false;
// 함수의 데이터 타입 명시(매개변수, 반환형)
function plus(a: number, b: number): number {
return a + b;
}
// 반환 값이 없을 때
function hello(): void {
console.log("hello");
}
// 문자열 또는 문자열 array
function getLength(obj: string | string[]): number {
return obj.length;
}
// 객체 구조 명시
function getInfo(id: number): {
age: number;
myName: string;
course: string;
completed: boolean;
} {
// do something
return null;
}
?
붙이기extends
가 아니라 implements
interface Student {
age: number;
myName: string;
gender: string;
course: string;
completed?: boolean; // ?를 붙이면 optional property
}
function getInfo(id?: number): Student {
return {
age: 20,
myName: "hwang",
gender = "male";
course: "typescript",
completed: false
};
}
function setInfo(student: Student): void {
console.log(student);
}
interface Student {
age: number;
myName: string;
gender: string;
course: string;
completed?: boolean;
// 함수, 즉 method도 정의 가능
// setName(name: string): void;
setName: (name: string) => void;
getName: () => string;
}
class MyStudent implements Student {
age = 23;
myName = "do0ori";
gender = "female";
course = "Full Stack";
completed = false;
// method overriding
setName(name: string): void {
this.myName = name;
console.log(`이름 설정: ${this.myName}`);
}
getName(): string {
console.log(`학생 이름: ${this.myName}`);
return this.myName;
}
}
const myInstance = new MyStudent();
myInstance.getName(); // 학생 이름: do0ori
myInstance.setName("JaeKyung"); // 이름 설정: JaeKyung
myInstance.getName(); // 학생 이름: JaeKyung
enum GenderType {
Male, // default로 0부터 시작
Female
}
interface Student {
age: number;
myName: string;
gender: GenderType; // enum에서 정의한 타입 사용
course: string,
completed?: boolean;
setName: (name: string) => void;
getName: () => string;
}
class MyStudent implements Student {
age = 23;
myName = "do0ori";
gender = GenderType.Female; // enum member 사용
course = "Full Stack";
// method overriding
setName(name: string): void {
this.myName = name;
console.log(`이름 설정: ${this.myName}`);
}
getName(): string {
console.log(`학생 이름: ${this.myName}`);
return this.myName;
}
}
enum
의 멤버 값 지정enum GenderType {
Male = 2, // 2
Female // 3
}
enum GenderType {
Male = "male",
Female = "female"
}