티스토리 뷰
interface & type
interface는 오로지 object의 모양을 typescript에게 설명해 주기 위해서만 사용된다.
type Team = "red" | "blue" | "yellow" // ok
// interface Team = "red" | "blue" | "yellow" // X
// interface Tema = string //X
type Player = {
name: string
team: Team
}
interface Player {
name: string
team: Team
}
// 상속
type User = {
name: string
}
interface Player extends User {
~~~~
}
type Player = User & {
~~~~
}
// 인터페이스 합쳐줌 Type으로는 불가능!
interface User {
name: string
}
interface User {
lastName: string
}
interface User {
health: number
}
const bibliya: User = {
name: 'blbliya",
lastName: "n",
health: 10
}
// Type
type PlayerA = {
name: string
}
type PlayerAA = PlayerA & {
lastName: string
}
// type에서는 불가!
// type PlayerAA = {
// health: number
// }
const playerA: PlayerAA = {
name: "Blbliya",
lastName: "Seo"
}
// interface
interface PlayerB {
name: string
}
interface PlayerBB extends PlayerB {
lastName: string
}
//interface는 가능!
interface PlayerBB {
health: number
}
const playerB: PlayerBB = {
name: "Blbliya",
lastName: "Seo",
health: 10
}
abstract class & interface
1. Abstact Class 구현
TypeScript
// 추상 클래스로 구현
abstract class User {
constructor(
protected firstName: string,
protected lastName: string
){}
abstract sayHi(name: string): string
abstract fullName(): string
}
class Player extends User {
fullName(){
return `${this.firstName} ${this.lastName}`;
}
sayHi(name: string){
return `Hello, ${name}. My name is ${this.fullName}`;
}
}
JavaScript
// 추상 클래스로 구현
class User {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
class Player extends User {
fullName() {
return `${this.firstName} ${this.lastName}`;
}
sayHi(name) {
return `Hello, ${name}. My name is ${this.fullName}`;
}
}
2. Interface 구현
TypeScript
// 인터페이스로 구현
interface User {
firstName: string,
lastName: string,
sayHi(name: string): string
fullName(): string
}
// implement를 쓰면 가벼워 지는데
// 그 이유는 추적하지 못하기 때문에 javascript에서 User를 안 보이게 사용할 수 있다
// extends를 쓰면 JavaScript로 변환할 때 그래도 변역이 되어서 감
// interface를 상속할 때는 property를 private이나 protected로 만들지 못한다!
// only public
class Player implements User {
constructor(
public firstName: string,
public lastName: string
) {}
fullName(){
return `${this.firstName} ${this.lastName}`;
}
sayHi(name: string){
return `Hello, ${name}. My name is ${this.fullName}`;
}
}
JavaScript
class Player {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
fullName() {
return `${this.firstName} ${this.lastName}`;
}
sayHi(name) {
return `Hello, ${name}. My name is ${this.fullName}`;
}
}
type으로 사용할 수 도 있고 두개 이상의 인터페이스를 받을 수도 있다
TypeScript
// 인터페이스로 구현
interface User {
firstName: string,
lastName: string,
sayHi(name: string): string
fullName(): string
}
interface Human {
health: number
}
// 두개의 인터페이스를 사용
class Player implements User, Human {
constructor(
public firstName: string,
public lastName: string,
public health: number
) {}
fullName(){
return `${this.firstName} ${this.lastName}`;
}
sayHi(name: string){
return `Hello, ${name}. My name is ${this.fullName}`;
}
}
function makeUser(user: User): User {
return {
firstName: "bibliya",
lastName: "Seo",
fullName: () => `xxx`,
sayHi: (name) => `string`
}
}
// makeUser({
// firstName: "bibliya",
// lastName: "Seo",
// fullName: () => `xxx`,
// sayHi: (name) => `string`
// })
JavaScript
// 인터페이스로 구현
// 두개의 인터페이스를 사용
class Player {
constructor(firstName, lastName, health) {
this.firstName = firstName;
this.lastName = lastName;
this.health = health;
}
fullName() {
return `${this.firstName} ${this.lastName}`;
}
sayHi(name) {
return `Hello, ${name}. My name is ${this.fullName}`;
}
}
function makeUser(user) {
return {
firstName: "bibliya",
lastName: "Seo",
fullName: () => `xxx`,
sayHi: (name) => `string`
};
}
// makeUser({
// firstName: "bibliya",
// lastName: "Seo",
// fullName: () => `xxx`,
// sayHi: (name) => `string`
// })
type과 interface 모두 추상 클래스를 대체할 수 있다
TypeScript
// type & interface 모두 추상 클래스를 대체할 수 있음!
type PlayerA = {
firstName: string
}
interface PlayerB {
firstName: string
}
class User implements PlayerA {
constructor(
public firstName: string
){}
}
class User2 implements PlayerB {
constructor(
public firstName: string
){}
}
JavaScript
"use strict";
// type & interface 모두 추상 클래스를 대체할 수 있음!
class User {
constructor(firstName) {
this.firstName = firstName;
}
}
class User2 {
constructor(firstName) {
this.firstName = firstName;
}
}'TypeScript' 카테고리의 다른 글
| [TypeScript] Interface Polymorphism (Generic) (0) | 2022.10.13 |
|---|---|
| [TypeScript] Classes (0) | 2022.10.12 |
| [TypeScript] Functions (0) | 2022.10.12 |
| [TypeScript] 기본 타입 정리 (0) | 2022.10.12 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- nextjsrouter
- nextredirect
- 404pages
- stylesjsx
- nextjsseo
- websocekt
- cssmodules
- nextjsjsx
- firebasev9
- reduxtoolkit
- nextjscss
- typescriptfunction
- NextJS
- Socket
- typescriptclass
- 파이어베이스버전9
- firebasecollection
- reactjs
- nextrewrite
- mediaprint
- React
- 웹소캣
- reactquill
- typescriptinterface
- TypeScript
- webhook이란
- 웹인쇄
- Router
- firebaseorderby
- serversiderendering
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
글 보관함
