컴파일에서 반영되는 속성/인자의 집합
interface에서 확장된 넓은 개념으로, interface와 동일한 목적으로 활용한다.
interface Human{
name: string,
age: number,
job: string
}
class Human{
public name: string
public age: number
public job: string
}
class를 통한 객체 생성, 호출 등 초기화를 할 때마다 실행되는 메소드의 일종
class Human{
public name: string
public age: number
public job: string
constructor(name: string, age: number, job: string){
this.name = name
this.age = age
this.job = job
}
}
class를 생성하고, 해당 class를 이용하여 새로운 객체를 생성할 수 있다.
class Human{
public name: string
public age: number
public job: string
constructor(name: string, age: number, job: string){
this.name = name
this.age = age
this.job = job
}
}
const person1 = new Human("LEE HYO KYUN", 15, "Developer")
const foo = (Human) => {
return `HELLO ${Human.name}(_${Human.age})! How are your ${Human.job} going?`
}
console.log(foo(person1))
export {}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class Human {
constructor(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
}
}
const person1 = new Human("LEE HYO KYUN", 15, "Developer");
const foo = (Human) => {
return `HELLO ${Human.name}(_${Human.age})! How are your ${Human.job} going?`;
};
console.log(foo(person1));
//# sourceMappingURL=index.js.map
private 속성의 인자는 별도로 생성한 객체(new class)를 통해서가 아닌, 반드시 class 자체적으로 접근해야 한다.
class Human{
private name: string
public age: number
public job: string
constructor(name: string, age: number, job: string){
this.name = name
this.age = age
this.job = job
}
}
const person1 = new Human("LEE HYO KYUN", 15, "Developer")
const foo = (person: Human) => {
return `HELLO ${person.name}(_${person.age})! How are your ${person.job} going?`
}
console.log(foo(person1))
위 코드에서 Human class의 name 속성은 private로 정의되어 있다.
src/index.ts(15,28): error TS2341: Property 'name' is private and only accessible within class 'Human'.
Human의 new class를 생성한 후 별도의 객체가 아닌, Human class 자체적으로만 접근이 가능하다.
위 상태에서 해당 인자에 접근하려고 하면 위와 같은 오류가 발생한다.
const foo = (Human) => {
return `HELLO ${Human.name}(_${Human.age})! How are your ${Human.job} going?`
}
class 자체적으로 접근한다는 것은, 말 그대로 class를 직접 호출하는 것이다.
위와 같이 person 객체로 접근하는 부분을 class로 직접 접근하는 방식으로 바꾸면, 정상적으로 해당 인자를 활용할 수 있게 된다.
class
React, node.js 등 문법/구조적인 혼용 측면에서는 class 사용을 권장한다.
interface
typescript 측면에서는 interface가 안정적이다.
javascript class
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Classes