class Person {
constructor(protected name: string, private age: number) {
this.name = name;
this.age = age;
}
}
class User extends Person {
constructor(name: string, age: number) {
super(name, age);
console.log(this.name);
console.log(this.age); // Property 'age' is private and only accessible within class 'Person'.ts(2341)
}
}
const user = new User("Kim", 20);
console.log(user.name); // Property 'name' is protected and only accessible within class 'Person' and its subclasses.
μ κ·Ό κ°λ₯μ± | public | protected | private |
---|---|---|---|
ν΄λμ€ λ΄λΆ | β― | β― | β |
μμ ν΄λμ€ λ΄λΆ | β― | β― | β |
ν΄λμ€ μΈμ€ν΄μ€ | β― | β | β |
interface IPerson {
name: string;
age?: number;
}
class Person implements IPerson {
constructor(public name: string, public age?: number) {}
}
const person = new Person("Kim", 20);
console.log(person); // Person {name: "Kim", age: 20, constructor: Object}
interface μμ± ν classμ implements
ν€μλ μ¬μ©ν΄μ μ μ© constructorμμ this.name = name
μ΄λ κ² νμ§ μμλ λλ€.
interface IPerson {
name: string;
age?: number;
}
class Person implements IPerson {
constructor(public readonly name: string, public age?: number) {}
}
const person = new Person("Kim", 20);
person.name = "Lee"; // Cannot assign to 'name' because it is a read-only property.ts(2540)
readonly
ν€μλ μ΄μ©ν΄ μμ μ μΈμ ν μ μλ€.
interface IPerson {
name: string;
age?: number;
}
class Person implements IPerson {
constructor(public readonly name: string, public age?: number) {}
static sayHello() {
console.log("Hello");
}
}
Person.sayHello(); // Hello
static
ν€μλλ μ μ λ©μλλ₯Ό μ μν λ μ¬μ©νλ€. ν΄λμ€μ μΈμ€ν΄μ€λ‘ λ©μλλ₯Ό νΈμΆνλκ² μλλΌ ν΄λμ€μ μ΄λ¦μΌλ‘ νΈμΆνλ€.
abstract class Person {
abstract sayHi(): void;
sayHello(): void {
console.log("Hello");
}
}
class User extends Person {
sayHi() {
console.log("Hi!");
}
}
const user = new User();
user.sayHi(); // Hi!
user.sayHello(); // Hello
μΆμ ν΄λμ€λ μΆμ λ©μλμ μΌλ° λ©μλλ₯Ό ν¬ν¨νκ³ , λ΄μ©μ΄ μμ΄ λ©μλ μ΄λ¦κ³Ό νμ
λ§ μ μΈλ λ©μλλ₯Ό λ»νλ€. abstract
ν€μλλ₯Ό μ¬μ©νλ€. μ§μ μΈμ€ν΄μ€ μμ±ν μ μμΌλ©° μμμ μν΄ μ‘΄μ¬νλ€. λ°λΌμ μΆμ ν΄λμ€μ μλΈ ν΄λμ€λ μΆμ λ©μλλ₯Ό λ°λμ ꡬνν΄μ€μΌνλ€.
const person: object = { name: "kim" };
console.log(person.name); // Property 'name' does not exist on type 'object'.ts(2339)
μ μ½λμ μ€λ₯λ personμ νμ μ΄ objectμΈλ° object νμ μ΄ name μμ±μ κ°μ§μ§ μκΈ° λλ¬Έμ λ°μνλ€. λ°λΌμ μ΄ λ¬Έμ λ₯Ό νμ λ³ν ꡬ문μ μ΄μ©ν΄ ν΄κ²°ν μ μλ€.
(<{ name: string }>person).name
person λ³μλ₯Ό μΌμμ μΌλ‘ name μμ±μ΄ μλ νμ μΌλ‘ λ³νν΄ μμ±κ°μ μ»κ² νλ€.
νμ μ€ν¬λ¦½νΈμμλ νμ λ³νμ΄ μλ νμ λ¨μΈ (type assertion) μ΄λΌκ³ νννλ€.
(<type>Object)
λλ Object as type
ννκ° μλ€.