Interface
Interface
- ํ์ ๋ค์ ์ด๋ฆ์ ์ง๋ ์ญํ
- ์ฝ๋ ์์ ๊ณ์ฝ์ ์ ์
- ํ๋ก์ ํธ ์ธ๋ถ์์ ์ฌ์ฉํ๋ ์ฝ๋์ ๊ณ์ฝ์ ์ ์
interface Age {
age: number;
}
function personAge(personObj: Age) {
console.log(personObj.key);
}
let person = { name: "job", age: 20 };
personAge(person);
- personAge๋ Age์ ํ์ ์ ๊ฐ์ ธ์ผ ํ๋ค.
- โจ ์ธํฐํ์ด์ค๋ฅผ ์ธ์๋ก ๋ฐ์ ์ฌ์ฉํ ๋ ์ธํฐํ์ด์ค์ ์์ฑ ๊ฐฏ์์ ์ธ์๋ก ๋ฐ๋ ๊ฐ์ฒด์ ์์ฑ ๊ฐฏ์๋ฅผ ์ผ์น์ํค์ง ์์๋ ๋๋ค.
- โจ ํจ์์ ์ ๋ฌ๋ ๊ฐ์ฒด๊ฐ ๋์ด๋ ์๊ตฌ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ฉด, ํ์ฉ๋๋ค.
์ ํ์ ํ๋กํผํฐ (Optional Properties)
- ์ ํ์ ํ๋กํผํฐ๋ ์ ์ธ์์ ํ๋กํผํฐ ์ด๋ฆ ๋์
?
๋ฅผ ๋ถ์ฌ ํ์ - โจ ์ฆ, ์์ด๋ ๋๊ณ ์์ด๋ ๋๋ค๋ ํ์
interface Student {
name : string;
grade? : number;
}
let student1 = {
name : 'bob';
};
function newStudent(student:Student){
console.log(student.name);//bob
}
- โจ
newStudent()
ํจ์์์student
์ธํฐํ์ด์ค๋ฅผ ์ธ์์ ํ์ ์ผ๋ก ์ ์ธํ์ง๋ง, ์ธ์๋ก ๋๊ธด ๊ฐ์ฒด์๋grade
๊ฐ ์๋ค โก๏ธgrade
๋ฅผ ์ ํ์ ํ๋กํผํฐ๋ก ์ ์ธํ๊ธฐ ๋๋ฌธ!
์ฝ๊ธฐ์ ์ฉ ํ๋กํผํฐ (Read0nly properties)
- ํ๋กํผํฐ ์ด๋ฆ ์์
readonly
๋ฅผ ๋ถํ๊ฒ ๋๋ฉด ๋์ด์ ์์ ์ด ๋ถ๊ฐ๋ฅํด์ง๋ค.
interface Point {
readonly x: number;
readonly y: number;
}
let p1: Point = { x: 10, y: 20 };
p1.x = 8; //์ค๋ฅ - ๋ถ๊ฐ๋ฅ!
ReadonlyArray<T>
- ๋ฐฐ์ด ์ ์ธ ์,
ReadonlyArray<T>
ํ์ ์ ์ฌ์ฉํ๋ฉด ์ฝ๊ธฐ์ ์ฉ ๋ฐฐ์ด ์์ฑ ๊ฐ๋ฅ
let arr: number[] = [1, 2, 3, 4, 5];
let readNum: ReadonlyArray<number> = arr;
readNum[0] = 10; // ์๋ฌ
readNum.push(8); // ์๋ฌ
arr = readNum; // ์๋ฌ
ReadonlyArray
๋ฅผ ์ผ๋ฐ ๋ฐฐ์ด์ ์ฌํ ๋น ๋ถ๊ฐ๋ฅ
๊ฐ์ฒด ์ ์ธ๊ณผ ๊ด๋ จ๋ ํ์ ์ฒดํน (Excess Property Checks)
interface NewZoo {
animal?: string;
size?: number;
}
function createZoo(zoo: NewZoo) {
//...
}
createZoo({ animel: "lion" }); // error: Object literal may only specify known properties, but 'animel' does not exist in type 'NewZoo'. Did you mean to write 'animal'?
let korZoo = { animel: "lion" };
NewZoo
์ธํฐํ์ด์ค์๋ animal
์ด๋ผ๊ณ ์ ์ธ๋์ด์์ง๋ง createZoo()
ํจ์์ ์ธ์๋ก ๋๊ธฐ๋ korZoo
๊ฐ์ฒด์๋ animel
์ด ์ ์ธ๋์ด ์์ด ์คํ์๋ฅผ ์ ๊ฒํ๋ผ๋ ์ค๋ฅ๊ฐ ๋ฐ์ ๐ฅ
๐ ํ์ ์ถ๋ก ์ ๋ฌด์ํ๊ณ ์ถ์ ๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธ
createZoo(korZoo as NewZoo)
- ์ธํฐํ์ด์ค ์ ์ํ์ง ์์ ์์ฑ๋ค์ ์ถ๊ฐ๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๋
interface NewZoo {
animal?: string;
size?: number;
[propName: string]: any;
}
ํจ์ ํ์ (Function Types)
- ํจ์์ ํ์ ์ ์ ์ํ ๋๋ ์ฌ์ฉ ๊ฐ๋ฅ
interface login {
(username: string, password: string): boolean;
}
- ํจ์์ ์ธ์์ ํ์ ๊ณผ ๋ฐํ ๊ฐ์ ํ์ ์ ์
let loginUser: login;
loginUser = function (id: string, pw: string) {
console.log("๋ก๊ทธ์ธ ์ฑ๊ณต");
return true;
};
์ธํฐํ์ด์ค ํ์ฅ (Extending Interfaces)
interface Person {
name: string;
}
interface Developer extends Person {
skill: string;
}
let he = {} as Developer;
he.name = "jack";
he.skill = "TypeScript";
- ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ ์ ์๊ธฐ์, ๋ชจ๋ ์ธํฐํ์ด์ค์ ์กฐํฉ์ ๋ง๋ค ์ ์๋ค.
interface Hobby {
hobby: string;
}
interface Developer extends Person, Hobby {
isJob: boolean;
}
let he = {} as Developer;
he.hobby = fishing;
he.isJob = false;