TypeScriptμ ν΅μ¬ μμΉ μ€ νλλ νμ
κ²μ¬κ° κ°μ ννμ μ΄μ μ λ§μΆκ³ μλ€λ κ²μΈλ°, TypeScriptμμ, μΈν°νμ΄μ€(interface
)λ
- μ΄λ° νμ λ€μ μ΄λ¦μ μ§λ μν μ νκ³
- μ½λ μμ κ³μ½μ μ μνλ κ²λΏλ§ μλλΌ
- νλ‘μ νΈ μΈλΆμμ μ¬μ©νλ μ½λμ κ³μ½μ μ μνλ κ°λ ₯ν λ°©λ²μ΄λ€.
첫 λ²μ§Έ μΈν°νμ΄μ€ (Our First Interface)
μ΄λ»κ² μΈν°νμ΄μ€κ° λμνλμ§ νμΈνλ κ°μ₯ μ¬μ΄ λ°©λ²μ κ°λ¨ν μμ λ‘ νμΈνκΈ°!
// interface μ¬μ© μ
// printLabel ν¨μλ string νμ
labelμ κ°λ κ°μ²΄λ₯Ό νλμ 맀κ°λ³μλ₯Ό κ°λλ€
function printLabel(labeledObj: { label: string }) {
console.log(labeledObj.label);
}
let myObj = { size: 10, label: "Size 10 Object" };
printLabel(myObj);
// interface μ¬μ© ν
// λ¬Έμμ΄ νμ
μ νλ‘νΌν° labelμ κ°μ§ μΈν°νμ΄μ€λ‘ μμ±
interface LabeledValue {
label: string;
}
function printLabel(labeledObj: LabeledValue) {
console.log(labeledObj.label);
}
let myObj = { size: 10, label: "Size 10 Object" };
printLabel(myObj);
Optional Properties
μΈν°νμ΄μ€μ λͺ¨λ νλ‘νΌν°κ° νμν κ²μ μλλ€. μ΄λ€ 쑰건μμλ§ μ‘΄μ¬νκ±°λ μμ μμ μλ μλ€.
μ νμ νλ‘νΌν°λ€μ κ°μ²΄ μμ λͺ κ°μ νλ‘νΌν°λ§ μ±μ ν¨μμ μ λ¬νλ βoption bagsβ κ°μ ν¨ν΄μ λ§λ€ λ μ μ©νλ€!
interface PaintOptions {
shape: Shape;
xPos?: number;
yPos?: number;
}
function paintShape(opts: PaintOptions) {
// ...
}
const shape = getShape();
paintShape({ shape });
paintShape({ shape, xPos: 100 });
paintShape({ shape, yPos: 100 });
paintShape({ shape, xPos: 100, yPos: 100 });
Readonly properties
μΌλΆ νλ‘νΌν°λ€μ κ°μ²΄κ° μ²μ μμ±λ λλ§ μμ κ°λ₯ν΄μΌ ν λ μ¬μ©.
interface Point {
readonly x: number;
readonly y: number;
}
let p1: Point = { x: 10, y: 20 };
p1.x = 5; // μ€λ₯!
μΈλ±μ€ νμ (Index Types)
μΈν°νμ΄μ€μμ μμ± μ΄λ¦μ ꡬ체μ μΌλ‘ μ μνμ§ μκ³ κ°μ νμ λ§ μ μνλ κ²μ μΈλ±μ€ νμ μ΄λΌ νλ€.
interface SquareConfig {
color?: string;
width?: number;
[propName: string]: any;
}
let squareOptions = { color: "red", width: 100 };
let mySquare = createSquare(squareOptions);
Extending Types
ν΄λμ€μ²λΌ, μΈν°νμ΄μ€λ€λ νμ₯(extend)μ΄ κ°λ₯νλ€.
νμ₯(extend)μ ν μΈν°νμ΄μ€μ λ©€λ²λ₯Ό λ€λ₯Έ μΈν°νμ΄μ€μ 볡μ¬νλ κ²μ κ°λ₯νκ² ν΄μ£Όλλ°, μ¬μ¬μ©μ± λμ μ»΄ν¬λνΈλ‘ μͺΌκ°€ λ μ μ°νκ² ν μ μλ€.
// μμ 1
interface BasicAddress {
name?: string;
street: string;
city: string;
country: string;
postalCode: string;
}
interface AddressWithUnit extends BasicAddress {
unit: string;
}
// μμ 2
interface Colorful {
color: string;
}
interface Circle {
radius: number;
}
interface ColorfulCircle extends Colorful, Circle {}
const cc: ColorfulCircle = {
color: "red",
radius: 42,
};
κ΅μ°¨ νμ (Intersection Types)
interfaces
λ₯Ό μ¬μ©νλ©΄ λ€λ₯Έ μ νμ νμ₯νμ¬ λ€λ₯Έ μ νμμ μ μ νμ ꡬμΆν μ μλ€. Intersection Typesμ &
μ°μ°μλ₯Ό μ¬μ©νμ¬ μ μνλ€.
interface Colorful {
color: string;
}
interface Circle {
radius: number;
}
type ColorfulCircle = Colorful & Circle;
μ°Έκ³ μλ£: typescript-kr.github.io