π€ Chapter 3: κ°μ²΄μ νμ
π¦ νμ μ€ν¬λ¦½νΈ λ³μ μ μΈλ¬Έβ
π νμ μ€ν¬λ¦½νΈ κΈ°λ³Έ μ 곡 νμ β
- μλ°μ€ν¬λ¦½νΈμ νμ μ€ν¬λ¦½νΈμ κΈ°λ³Έ νμ
μ ν | μλ°μ€ν¬λ¦½νΈ νμ | νμ μ€ν¬λ¦½νΈ νμ |
---|---|---|
μ μ ν | Number | number |
λΆλ¦¬μΈ νμ | Boolean | boolean |
λ¬Έμμ΄ νμ | String | string |
κ°μ²΄ νμ | Object | object |
π letκ³Ό const ν€μλβ
- λ€μμ
let
ν€μλλ‘ λ³μλ₯Ό μ μΈνλ λ°©λ²μ΄λ€. let
μΌλ‘ μ μΈν λ³μλ μ½λμμ κ·Έ κ°μ΄ μμλ‘ λ³κ²½λ μ μμμ μμνλ€.
let a = 1;
- λ€μμ
const
ν€μλλ‘ λ³μλ₯Ό μ μΈνλ λ°©λ²μ΄λ€. const
λ‘ λ³μλ₯Ό μ μΈν λλ λ°λμ μ΄κΈ°κ°μ λͺ μν΄μΌ νλ€.const
λ³μλ μ½λμμ λ³μ«κ°μ΄ μ λ λ³νμ§ μλλ€λ κ²μ μμνλ€.
const a = 1;
π νμ μ£Όμβ
- νμ μ€ν¬λ¦½νΈλ μλ°μ€ν¬λ¦½νΈ λ³μ μ μΈλ¬Έμ νμ₯ν΄ λ€μκ³Ό κ°μ ννλ‘ νμ μ λͺ μν μ μλ€.
- μ΄λ₯Ό νμ μ£Όμ(type annotation)μ΄λΌκ³ νλ€.
// let λ³μ μ΄λ¦: νμ
[= μ΄κΉκ°]
// const λ³μμ΄λ¦: νμ
= μ΄κΉκ°
let n: number = 1;
let b: boolean = true;
let s: string = 'hello';
let o: object = {};
- νμ
μ€ν¬λ¦½νΈλ
let
μΌλ‘ μ μΈν λ³μ«κ°μ νμ μ£ΌμμΌλ‘ λͺ μν νμ μ ν΄λΉνλ κ°μΌλ‘λ§ λ°κΏ μ μλ€.
let n: number = 1;
let b: boolean = true;
let s: string = 'hello';
n = 'a'; // νμ
λΆμΌμΉ μ€λ₯ λ°μ
b = 1; // νμ
λΆμΌμΉ μ€λ₯ λ°μ
s = false; // νμ
λΆμΌμΉ μ€λ₯ λ°μ
π νμ μΆλ‘ β
- νμ μ€ν¬λ¦½νΈλ μλ°μ€ν¬λ¦½νΈμ νΈνμ±μ μν΄ νμ μ£Όμ λΆλΆμ μλ΅ν μ μλ€.
- νμ
μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ λ€μκ³Ό κ°μ μ½λλ₯Ό λ§λλ©΄ λμ
μ°μ°μ
=
μ€λ₯Έμͺ½ κ°μ λ°λΌ λ³μμ νμ μ μ§μ νλ€. - μ΄λ₯Ό νμ μΆλ‘ (type inference)μ΄λΌκ³ νλ€.
let n = 1; // nμ νμ
μ numberλ‘ νλ¨
let b = true; // bμ νμ
μ booleanμΌλ‘ νλ¨
let s = 'hello'; // sμ νμ
μ stringμΌλ‘ νλ¨
let o = {}; // oμ νμ
μ objectλ‘ νλ¨
- μ¦, λ³μ μ μΈλ¬Έμ νμ μ£Όμμ λͺ μνμ§ μμμ§λ§, μ»΄νμΌλ¬κ° μ΄κΉκ°μ λ°λΌ νμ μ μΆλ‘ νλ―λ‘ κ° λ³μλ μ΄κΉκ°μ ν΄λΉνλ νμ μΌλ‘ μ§μ λλ€. λ°λΌμ μ΄νμ κ° λ³μμλ ν΄λΉ νμ μ κ°λ§ μ§μ ν μ μλ€.
π any νμ β
- λ€μ μ½λμμ λ³μ
a
λ νμ μ΄any
μ΄λ―λ‘ κ°μ νμ κ³Ό 무κ΄νκ² μ΄λ€ μ’ λ₯μ κ°λ μ μ₯ν μ μλ€.
let a: any = 0;
a = 'hello';
a = true;
a = {};
π undefined νμ β
- μλ°μ€ν¬λ¦½νΈμμ
undefined
λ κ°μ΄λ€. (λ³μλ₯Ό μ΄κΈ°ννμ§ μμΌλ©΄) - κ·Έλ¬λ νμ
μ€ν¬λ¦½νΈμμ
undefined
λ νμ μ΄κΈ°λ νκ³ κ°μ΄κΈ°λ νλ€.
let u: undefined = undefined;
u = 1; // Type '1' is not assignable to type 'undefined' μ€λ₯ λ°μ
- νμ
μ μμ κ΄κ³λ₯Ό 보면
any
λ λͺ¨λ νμ μ λ£¨νΈ νμ , μ¦ μ΅μμ νμ μ΄λ€. - λ°λ©΄μ
undefined
λ λͺ¨λ νμ μ μ΅νμ νμ μ΄λ€.
π ν νλ¦Ώ λ¬Έμμ΄β
- λ³μμ λ΄κΈ΄ κ°μ μ‘°ν©ν΄ λ¬Έμμ΄μ λ§λ€ μ μκ² νλ ν νλ¦Ώ λ¬Έμμ΄μ μ 곡νλ€.
let count = 10, message = 'Your count';
let result = `${message} is ${count}`;
console.log(result); // Your count is 10
π¦ κ°μ²΄μ μΈν°νμ΄μ€β
object
νμ μ μΈν°νμ΄μ€μ ν΄λμ€μ μμ νμ μ΄λ€.object
νμ μΌλ‘ μ μΈλ λ³μλnumber
,boolean
,string
νμ μ κ°μ κ°μ§ μλ μμ§λ§, λ€μμ²λΌ μμ± μ΄λ¦μ΄ λ€λ₯Έ κ°μ²΄λ₯Ό λͺ¨λ μμ λ‘κ² λ΄μ μ μλ€.
let o: object = { name: 'Jack', age: 32 };
o = { first: 1, second: 2 };
object
νμ μ λ§μΉ κ°μ²΄λ₯Ό λμμΌλ‘ νλany
νμ μ²λΌ λμνλ€.- νμ μ€ν¬λ¦½νΈμ μΈν°νμ΄μ€ ꡬ문μ μ΄λ κ² λμνμ§ μκ² νλ €λ λͺ©μ μΌλ‘ κ³ μλμλ€.
- μ¦, λ³μ
o
μλ νμname
κ³Όage
μμ±μΌλ‘ ꡬμ±λ κ°μ²΄λ§ κ°μ§ μ μκ² ν΄μ λ€λ₯Έ νμ μΌ κ²½μ° μ€λ₯λ₯Ό λ°μνκ² νλ€.
π μΈν°νμ΄μ€ μ μΈλ¬Έβ
- νμ
μ€ν¬λ¦½νΈλ κ°μ²΄μ νμ
μ μ μν μ μκ² νλ
interface
λΌλ ν€μλλ₯Ό μ 곡νλ€.
interface IPerson {
name: string;
age: number;
};
- μΈν°νμ΄μ€μ λͺ©μ μ κ°μ²΄μ νμ
λ²μλ₯Ό μ’νλ λ° μλ€. λ°λΌμ λ€μμ²λΌ
IPerson
μΈν°νμ΄μ€μ 쑰건μ λ²μ΄λλ μ½λλ λͺ¨λ μ€λ₯κ° λ°μνλ€.
interface IPerson {
name: string;
age: number;
};
let good: IPerson = { name: 'Jack', age: 32 };
// 'age' μμ±μ΄ '{ name: string; }' νμμ μμ§λ§ 'IPerson' νμμμ νμμ
λλ€.
let bad1: IPerson = { name: 'Jack' };
// 'name' μμ±μ΄ '{ age: number; }' νμμ μμ§λ§ 'IPerson' νμμμ νμμ
λλ€.
let bad2: IPerson = { age: 32 };
// '{}' νμμ 'IPerson' νμμ name, age μμ±μ΄ μμ΅λλ€.
let bad3: IPerson = {};
// κ°μ²΄ 리ν°λ΄μ μλ €μ§ μμ±λ§ μ§μ ν μ μμΌλ©° 'IPerson' νμμ 'etc'μ΄(κ°) μμ΅λλ€.
let bad4: IPerson = { name: 'Jack', age: 32, etc: true };
π μ ν μμ± κ΅¬λ¬Έβ
- μΈν°νμ΄μ€λ₯Ό μ€κ³ν λ μ΄λ€ μμ±μ λ°λμ μμ΄μΌ νμ§λ§, μ΄λ€ μμ±μ μμ΄λ λκ³ μμ΄λ λλ ννλ‘ λ§λ€κ³ μΆμ λκ° μλ€.
- μ΄λ¬ν μμ±μ μ ν μμ±(optional property)μ΄λΌκ³ νλ€.
interface IPerson2 {
name: string;
age: number;
etc?: boolean; // optional property
}
let good1: IPerson2 = { name: 'Jack', age: 32 };
let good2: IPerson2 = { name: 'Jack', age: 32, etc: true };
π μ΅λͺ μΈν°νμ΄μ€β
- νμ
μ€ν¬λ¦½νΈλ
interface
ν€μλλ μ¬μ©νμ§ μκ³ μΈν°νμ΄μ€μ μ΄λ¦λ μλ μΈν°νμ΄μ€λ₯Ό λ§λ€ μ μλ€. - μ΄λ₯Ό μ΅λͺ μΈν°νμ΄μ€(anonymous interface)λΌκ³ νλ€.
- μ΅λͺ μΈν°νμ΄μ€ μ
let ai: {
name: string,
age: number,
etc?: boolean,
} = { name: 'Jack', age: 32 };
- ν¨μμ μ¬μ©λ μ΅λͺ μΈν°νμ΄μ€ μ
function printMe(me: { name: string, age: number, etc?: boolean }) {
console.log(
me.etc?
`${me.name} ${me.age} ${me.etc}` :
`${me.name} ${me.age}`
);
}
printMe(ai); // Jack 32
π¦ κ°μ²΄μ ν΄λμ€β
π ν΄λμ€ μ μΈλ¬Έβ
- νμ
μ€ν¬λ¦½νΈλ κ°μ²΄μ§ν₯ μΈμ΄μμ νν λ³Ό μ μλ
class
,private
,public
,protected
,implements
,extend
μ κ°μ ν€μλλ₯Ό μ 곡νλ€. - λ¬Έλ²μ μΈ μ°¨μ΄λ§ μ½κ° μμ λΏ μ¬μ€μ κ·Έ μλ―Έλ λ€λ₯Έ μΈμ΄μ κ°λ€.
- λ€μμ ν΄λμ€ μ μΈλ¬Έ κΈ°λ³Έ ννμ΄λ€.
class ν΄λμ€μ΄λ¦ {
[private | protected | public] μμ± μ΄λ¦[?]: μμ± νμ
[...]
}
- λ€μ μ½λλ
name
κ³Όage
λΌλ μμ±μ κ°μ§ ν΄λμ€λ₯Ό μ μΈνλ€.
class Person1 {
name: string;
age?: number;
}
- λ€μ μ½λλ
Person1
ν΄λμ€μnew
μ°μ°μλ₯Ό μ μ©ν΄jack1
μ΄λΌλ μ΄λ¦μPerson1
νμ λ³μλ₯Ό λ§λ λ€.
let jack1: Person1 = new Person1();
jack1.name = 'Jack';
jack1.age = 32;
console.log(jack1); // Person1 { name: 'Jack', age: 32 }
π μ κ·Ό μ νμβ
- ν΄λμ€ μμ±μ
public
,private
,protect
μ κ°μ μ κ·Ό μ νμ(access modifier)λ₯Ό μ΄λ¦ μμ λΆμΌ μ μλ€. λ§μ½ μλ΅νλ©΄ λͺ¨λpublic
μΌλ‘ κ°μ£Όνλ€.
π μμ±μβ
- νμ
μ€ν¬λ¦½νΈ ν΄λμ€λ
constructor
λΌλ μ΄λ¦μ νΉλ³ν λ©μλλ₯Ό ν¬ν¨νλλ°, μ΄λ₯Ό μμ±μλΌκ³ νλ€. - λ€λ₯Έ μΈμ΄μ λ€λ₯΄κ² νμ μ€ν¬λ¦½νΈ ν΄λμ€λ λ€μ μ½λμ²λΌ ν΄λμ€μ μμ±(name, age)μ μ μΈν μ μλ€.
- μ¦, μμμ μμ±ν
Person1
ν΄λμ€μ λκ°μ΄ λμνλ€.
class Person2 {
constructor(public name: string, public age?: number) {};
}
let jack2: Person2 = new Person2('Jack', 32);
console.log(jack2); // Person2 { name: 'Jack', age: 32 }
- νμ
μ€ν¬λ¦½νΈλ μμ±μμ 맀κ°λ³μμ
public
κ³Ό κ°μ μ κ·Ό μ νμλ₯Ό λΆμ΄λ©΄ ν΄λΉ 맀κ°λ³μμ μ΄λ¦μ κ°μ§ μμ±μ΄ ν΄λμ€μ μ μΈλ κ²μ²λΌ λμνλ€. - μ¦ λ€μκ³Ό κ°μ΄ μ₯ν©νκ² κ΅¬νλ κ²μ ν¨μΆν΄μ ꡬνν κ²μ΄λ€.
class Person3 {
name: string;
age?: number;
constructor(name: string, age?: number) {
this.name = name;
this.age = age;
};
}
let jack3: Person3 = new Person3('Jack', 32);
console.log(jack3); // Person3 { name: 'Jack', age: 32 }
π μΈν°νμ΄μ€ ꡬνβ
- νμ μ€ν¬λ¦½νΈ ν΄λμ€λ μΈν°νμ΄μ€λ₯Ό ꡬνν μ μλ€.
- ν΄λμ€κ° μΈν°νμ΄μ€λ₯Όκ΅¬νν λλ λ€μμ²λΌ
implements
ν€μλλ₯Ό μ¬μ©νλ€.
class ν΄λμ€μ΄λ¦ implements μΈν°νμ΄μ€μ΄λ¦ {
//...
}
- ν κ°μ§ μμΌλ‘ κΈ°μ΅ν΄ λ¬μΌ ν μ μ μΈν°νμ΄μ€λ μ΄λ¬μ΄λ¬ν μμ±μ΄ μμ΄μΌ νλ€λ κ·μ½(spec)μ λΆκ³Όν λΏ λ¬Όλ¦¬μ μΌλ‘ ν΄λΉ μμ±μ λ§λ€μ§ μλλ€λ μ μ΄λ€.
- λ°λΌμ ν΄λμ€ λͺΈν΅μλ λ°λμ μΈν°νμ΄μ€κ° μ μνκ³ μλ μμ±μ λ©€λ² μμ±μΌλ‘ ν¬ν¨ν΄μΌ νλ€.
interface IPerson4 {
name: string;
age?: number;
}
class Person4 implements IPerson4 {
name: string;
age: number;
}
- λ€μ μ½λλ μμ λ³Έ
Person2
ꡬν λ°©μμ μΈν°νμ΄μ€ ꡬνμ μμ©ν κ²μ΄λ€.
interface IPerson4 {
name: string;
age?: number;
}
class Person4 implements IPerson4 {
constructor(public name: string, public age?: number) {};
}
export let jack4: IPerson4 = new Person4('Jack', 32);
console.log(jack4); // Person4 { name: 'Jack', age: 32 }
π μΆμ ν΄λμ€β
- νμ
μ€ν¬λ¦½νΈλ λ€λ₯Έ μΈμ΄μ²λΌ
abstract
ν€μλλ₯Ό μ¬μ©ν΄ μΆμ ν΄λμ€λ₯Ό λ§λ€ μ μλ€. - μΆμ ν΄λμ€λ μμ μ μμ±μ΄λ λ©μλ μμ
abstract
λ₯Ό λΆμ¬ λλ₯Ό μμνλ λ€λ₯Έ ν΄λμ€μμ μ΄ μμ±μ΄λ λ©μλλ₯Ό ꡬννκ² νλ€.
abstract class ν΄λμ€μ΄λ¦ {
abstract μμ±μ΄λ¦: μμ±νμ
;
abstract λ©μλμ΄λ¦() {};
}
- λ€μ μ½λλ
name
μμ± μμabstract
κ° λΆμμΌλ―λ‘new
μ°μ°μλ₯Ό μ μ©ν΄ κ°μ²΄λ₯Ό λ§λ€ μ μλ€.
abstract class AbstractPerson5 {
abstract name: string;
constructor(public age?: number) {}
}
π ν΄λμ€μ μμβ
- κ°μ²΄μ§ν₯ μΈμ΄λ λΆλͺ¨ ν΄λμ€λ₯Ό μμλ°λ μμ ν΄λμ€λ₯Ό λ§λ€ μ μλλ°, νμ
μ€ν¬λ¦½νΈλ λ€μμ²λΌ
extends
ν€μλλ₯Ό μ¬μ©ν΄ μμ ν΄λμ€λ₯Ό λ§λ λ€.
class μμν΄λμ€ extends λΆλͺ¨ν΄λμ€ { /*...*/ }
- λ€μ
Person5
ν΄λμ€λAbstractPerson5
μΆμ ν΄λμ€λ₯Ό μμν΄AbstractPerson5
κ° κ΅¬ννage
λ₯Ό μ»κ³ ,AbstractPerson5
λ₯Ό μμλ°λ ν΄λμ€κ° ꡬνν΄μΌ νname
μμ±μ ꡬννλ€. - μ°Έκ³ λ‘ νμ
μ€ν¬λ¦½νΈμμλ λΆλͺ¨ ν΄λμ€μ μμ±μλ₯Ό
super
ν€μλλ‘ νΈμΆν μ μλ€.
abstract class AbstractPerson5 {
abstract name: string;
constructor(public age?: number) {}
}
class Person5 extends AbstractPerson5 {
constructor(public name: string, age?: number) {
super(age);
}
}
let jack5: Person5 = new Person5('Jack', 32);
console.log(jack5); // Person5 { name: 'Jack', age: 32 }
π static μμ±β
- νμ μ€ν¬λ¦½νΈ ν΄λμ€λ μ μ μΈ μμ±μ κ°μ§ μ μλ€.
- ν΄λμ€μ μ μ μμ±μ λ€μκ³Ό κ°μ ννλ‘ μ μΈνλ€.
class ν΄λμ€μ΄λ¦ {
static μ μ μμ±μ΄λ¦: μμ±νμ
}
- λ€μμ²λΌ μ μ μμ±μ μ νκΈ°λ²μ μ¬μ©ν΄ κ°μ μ»κ±°λ μ€μ ν μ μλ€.
class A {
static initValue = 1;
}
let initVal = A.initValue; // 1
π¦ κ°μ²΄μ λΉκ΅¬μ‘°ν ν λΉλ¬Έβ
- λ€μμ²λΌ μΈν°νμ΄μ€λ ν΄λμ€λ₯Ό μ¬μ©ν΄ κ΄λ ¨λ μ 보λ₯Ό λ¬Άμ΄ μλ‘μ΄ νμ μΌλ‘ νννλ€.
- μ΄λ₯Ό ꡬ쑰ν(structuring)λΌκ³ νλ€.
export interface IPerson {
name: string;
age: number;
}
export interface ICompany {
name: string;
age: number;
}
- μ½λλ₯Ό μ΄μ²λΌ ꡬ쑰ν νλ©΄ λ€μ μ½λμμ λ³΄λ― λΉμ·ν μ νμ λ³μλ₯Ό μ½κ² λ§λ€ μ μλ€.
- μ΄λ‘μ¨ μ½λμ κΈ°λ₯ νμ₯μ΄ μμν΄μ§λ€.
import { IPerson, ICompany } from "./IPerson_ICompany";
let jack: IPerson = { name: 'Jack', age: 32},
jane: IPerson = { name: 'jane', age: 32};
let apple: ICompany = { name: 'Apple', age: 42},
ms: ICompany = { name: 'Microsoft', age: 34};
π λΉκ΅¬μ‘°νλ?β
- ꡬ쑰νλ λ°μ΄ν°λ₯Ό λΆν΄νλ κ²μ λΉκ΅¬μ‘°ν(destructuring)λΌκ³ νλ€.
let name = jack.name;
let age = jack.age;
π λΉκ΅¬μ‘°ν ν λΉβ
- λΉκ΅¬μ‘°ν ν λΉμ κ°μ²΄μ μ μ©νλ €λ©΄ μ»κ³ μΆμ μμ±μ μ€κ΄νΈλ‘ λ¬Άλλ€.
import { IPerson } from "./IPerson_ICompany";
let jack: IPerson = { name: 'Jack', age: 32};
let {name, age} = jack; // λΉκ΅¬μ‘°ν ν λΉ
console.log(name, age); // Jack 32
π μμ¬ μ°μ°μβ
- μ μ μ°μ΄μ΄ 3κ°λ₯Ό μ¬μ©νλ
...
μ°μ°μλ μ¬μ©λλ μμΉμ λ°λΌ μμ¬ μ°μ°μ(rest operator) νΉμ μ κ° μ°μ°μ(spread operator)λΌκ³ λΆλ₯Έλ€. - μμ¬ μ°μ°μ μ
let address: any = {
country: 'Korea',
city: 'Seoul',
address1: 'Gangnam-gu',
address2: 'Sinsa-dong',
address3: '123-456',
};
const { country, city, ...detail} = address;
console.log(detail);
// { address1: 'Gangnam-gu', address2: 'Sinsa-dong', address3: '123-456' }
π μ κ° μ°μ°μβ
- μ 3κ° μ°μ°μκ° λΉκ΅¬μ‘°ν ν λΉλ¬Έμ΄ μλ κ³³μμ μ¬μ©λ λ μ΄λ₯Ό μ κ° μ°μ°μλΌκ³ νλ€.
let coord = { ...{ x: 0 }, ...{ y: 0 } };
console.log(coord); // { x: 0, y: 0 }
- μ κ° μ°μ°μλ μλ―Έ κ·Έλλ‘ κ°μ²΄μ μμ±μ λͺ¨λ μ κ°ν΄ μλ‘μ΄ κ°μ²΄λ‘ λ§λ€μ΄ μ€λ€.
let part1 = { name: 'jane' };
let part2 = { age: 22 };
let part3 = { city: 'Seoul', country: 'Kr'};
let merged = { ...part1, ...part2, ...part3 };
console.log(merged); // { name: 'jane', age: 22, city: 'Seoul', country: 'Kr' }
π¦ κ°μ²΄μ νμ λ³νβ
π νμ λ³νβ
- νμ μ΄ μλ μΈμ΄λ€μ νΉμ νμ μ λ³μ«κ°μ λ€λ₯Έ νμ μ κ°μΌλ‘ λ³νν μ μλ κΈ°λ₯μ μ 곡νλ€.
- μ΄λ₯Ό νμ λ³ν(type conversion)μ΄λΌκ³ νλ€.
- λ€μμ
person
λ³μμ νμ μobject
μ΄λ€. κ·Έλ°λ°object
νμ μname
μμ±μ κ°μ§μ§ μμΌλ―λ‘ μ€λ₯κ° λ°μνλ€.
let person: object = { name: 'Jack', age: 32 };
person.name // 'object' νμμ 'name' μμ±μ΄ μμ΅λλ€.
- λ€μμ μ΄ μ€λ₯λ₯Ό νμ λ³ν ꡬ문μ μ¬μ©ν΄ ν΄κ²°ν κ²μ΄λ€.
person
λ³μλ₯Ό μΌμμ μΌλ‘name
μμ±μ΄ μλ νμ , μ¦{name: string}
νμ μΌλ‘ λ³νν΄person.name
μμ±κ°μ μ»κ² νλ€.
let person: object = { name: 'Jack', age: 32 };
(<{name:string}>person).name;
π νμ λ¨μΈβ
- κ·Έλ°λ° νμ μ€ν¬λ¦½νΈλ νμ λ³νμ΄ μλ νμ λ¨μΈ(type assertion)μ΄λΌλ μ©μ΄λ₯Ό μ¬μ©νλ€.
- νμ λ¨μΈλ¬Έμ λ€μ λ κ°μ§ ννκ° μλ€.
(<νμ
>κ°μ²΄)
(κ°μ²΄ as νμ
)
- μΈν°νμ΄μ€λ₯Ό ꡬνν
INameable.ts
νμΌμ λ§λ λ€.
export default interface INameable {
name: string
};
- λ€μ μ½λλ νμ λ¨μΈμ λ κ°μ§ ννμ΄λ€.
import INameable from './INameable';
let obj: object = { name: 'Jack' };
let name1 = (<INameable>obj).name;
let name2 = (obj as INameable).name;
console.log(name1, name2); // Jack Jack
- λμ μ°¨μ΄λ ννλ§ λ€λ₯Ό λΏ λ΄μ©μμΌλ‘λ κ°λ€.