let p1: { name: string; level: number } = {
name: "react",
level: 5,
};
let p2: { name: string; level: number } = {
name: "typescript",
level: 3,
};
let p3: { name: string; level: number } = {
name: "javascript",
level: 2,
};

interface 인터페이스이름 {
// 속성이름: 속성타입
}
interface Person {
name: string;
age: number
}
interface Language {
name: string;
level: number
}
let p1: Language = {
name: "react",
level: 5
};
let p2: Language = {
name: "typescript",
level: 3
};
let p3: Language = {
name: "javascript",
level: 2
};
interface 인터페이스이름 {
// 속성이름**?**: 속성타입
}
type UserType = {
name: string;
age: number;
}
interface UserInterface {
name: string;
age: number;
}
class User1 implements UserType {
}
class User2 implements UserInterface {
}
선언적 확장 불가능
동일한 이름으로 재선언 불가능
- 기존에 있던 타입 이름에 & 연산자 사용하여 저장
type AddType = UserType & { address: string };
선언적 확장 가능
동일한 이름으로 재선언 가능 & 기존값과 새 값이 합쳐짐
interface UserInterface {
address: string;
}
interface AddInterface extends UserInterface {
gender: string;
}
class 클래스이름 {
// 속성이름: 속성타입
}
class Person {
name: string
age: number
}

public, private, protected
생략 시, public으로 적용
class Person {
name: string; // public 적용
private _age: number;
// private 속성의 변수 앞에는 _를 붙이는 것을 권장
}


abstract class 클래스이름 {
속성이름: 속성타입
abstract 메서드이름() {}
}