728x90
type Player = {
nickname : string,
healthBar : number
} // 타입스크립트에게 object의 모양을 알려주는 것, 속성의 이름과 타입에 대해 알려줌
const kiki : Player = {
nickname : "kiki",
healthBar : 10
}
type Food = string
const kimchi:Food = "hot"
Interface : 객체의 모양을 특정해주기 위해 사용
인터페이스는 자바스크립트로 컴파일되지 않는다.-> 파일의 크기를 줄일 수 있음
추상클래스와 비슷한 보호를 제공하지만, 자바스크립트 파일에선 보이지 않음
type Team = "red" | "blue" | "yellow" // concrete타의 특정값을 쓸 수도 있음
type Health = 1 | 5 | 10
interface Player {
nickname : string,
team : Team // red, blue, yellow 값만 쓸 수 있음
health : Health
}
// interface : 객체의 모양을 특정해주기 위해 사용
const kiki :Player = {
nickname : "kiki",
team : "blue", // 지정한 값 외의 값은 쓸 수 없음
health : 10
}
interface도 class처럼 상속가능함
interface User {
name : string
}
interface Player extends User{
}
const kiki :Player = {
name : "kiki" // Player가 User 를 상속받았기 때문에 name 속성 사용 가능
}
////////// type 키워드로 같은 기능 구현
type User = {
name : string
}
type Player = User & {
} // &연산자를 써서 속성 공유
const kiki :Player = {
name : "kiki"
}
interface는 property 들을 축적시킬 수 있음
interface User {
name : string
}
interface User {
lastName : string
}
interface User {
health : number
}
// 3개의 인터페이스 생성 -> 3번을 각각 만들어도 타입스크립트가 알아서 하나로 합쳐줌
const kiki: User = {
name : "kiki",
lastName : "kuku",
health : 99
}
추상 클래스만들기
abstract class User {
constructor(
protected firstName : string,
protected lastName : string
) {}
abstract sayHi(name:string):string
abstract fullName():string
} // 추상클래스는 상속받는 다른 클래스가 가질 property와 method를 지정하도록 해줌
// 지정한 메소드를 상속받는 다른 클래스가 구현해야함
// 추상클래스는 인스턴스 생성을 허용하지 않음 -> new 키워드로 객체 생성 불가
// 상속받는 클래스가 어떻게 동작해야할 지 일러주기 위해 추상클래스 사용
class Player extends User {
fullName(){
return `${this.firstName} ${this.lastName}`
}
sayHi(name:string){
return `Hello ${name}. My name is ${this.FullName()}`
}
}
// 추상클래스를 인터페이스로 바꾸기 -> 인터페이스를 쓰면 코드가 더 가벼워진다
// 인터페이스는 타입스크립트에서만 존재하고 자바스크립트에서는 존재하지 않음
// -> 자바스크립트 코드로 컴파일되지 않음(파일의 크기를 줄일 수 있음)
interface User {
firstName : string,
lastName : string,
sayHi(name:string):string,
fullName():string
}
interface Human {
health : number
}
// 인터페이스의 내용을 상속하기 위해서 extends대신 implements 키워드 사용
// 코드가 더 가벼워짐!
// 각각 다른 인터페이스에서 상속받기도 가능
class Player implements User, Human {
constructor(
public firstName : string, // 인터페이스는 private property들을 사용하지 못함
public lastName : string,
public health : number
){}
fullName(){
return `${this.firstName} ${this.lastName}`
}
sayHi(name:string){
return `Hello ${name}. My name is ${this.FullName()}`
}
}
인터페이스 또한 타입으로 사용 가능
interface User {
firstName : string,
lastName : string,
sayHi(name:string):string,
fullName():string
}
function makeUser(user:User):User{
return "hi"
}
makeUser({
firstName : "kiki",
lastName : "kuku",
fullName : ()=> "xx",
sayHi(name) => "string"
})
타입과 인터페이스의 비교
타입과 인터페이스의 공통점
오브젝트의 모양과 타입을 알려주는 것이 목표
추상클래스를 대체해서 사용 가능
타입과 인터페이스의 차이점
상속하는 방법이 다름
728x90
'Study > Typescript' 카테고리의 다른 글
| Declaration files (0) | 2023.07.25 |
|---|---|
| tsconfig.json (0) | 2023.07.25 |
| Classes (0) | 2023.07.21 |
| Function (0) | 2023.07.19 |
| Typescript 노마드 코더 강의 (0) | 2023.07.18 |