ํ์ ์ถ๋ก
์ธํฐํ์ด์ค์ ์ ๋ค๋ฆญ์ ์ด์ฉํ ํ์ ์ถ๋ก
// ์ ๋ค๋ฆญ์ผ๋ก ๋๊ฒจ์ค ๊ฐ์ ์ธํฐํ์ด์ค์ ์์ฑ์ผ๋ก ์ฌ์ฉํ ์ ์์
interface Dropdown<T> {
value: T
title: string;
}
var shoppingItem: Dropdown<string> = {
value: // ๋ง์ฐ์ค ์ฌ๋ฆฌ๋ฉด string์ผ๋ก ๋ฌ๋ค.
์ธํฐํ์ด์ค๋ฅผ extendsํด์ ์ฌ์ฉํ ๋๋,
interface Dropdown<T> {
value: T
title: string;
}
var items: Dropdown<number> = {
value: 10,
title: 'a'
}
interface DetailedDropdown<T> extends Dropdown<T> {
description: string;
tag: T;
}
var detailItems: DetailedDropdown<number> = {
title: 'a',
description: 'b',
value: //๋ง์ฐ์ค ์ฌ๋ฆฌ๋ฉด number๋ก ๋ฌ๋ค. (ํ์ฅ์ผ๋ก ๋ค์ด๊ฐ ๊ฒ๋ ์ถ๋ก ๋จ)
}
Best Common Type
// number
var arr = [1,2,3]
//string | number | boolean
var arr1 = [1, 2, true, 'a']
๊ฐ์ฅ ๊ทผ์ ํ ํ์ ์ ์ถ๋ก ํ๋ค..? ๊ทธ๋ฅ ์ ๋์จ์ผ๋ก ๋ฌถ์ด์ ํํ.
ํ์ ๋จ์ธ
let a;
a = 20;
a = 'sample';
let b = a;
a์ ๋ง์ฐ์ค ์ฌ๋ฆฌ๋ฉด ๊ทธ๋ฅ any๋ผ ๋ธ. ํ์ง๋ง ๋์ผ๋ก ๋ณด๊ธฐ์๋ string์ผ๋ก ๋ค์ด๊ฐ์ผํ๋๊ฒ ๋ง์ง. ํ์ ์คํฌ๋ฆฝํธ๋ณด๋ค ๊ฐ๋ฐ์๊ฐ ํ์ ์ ๋ํด ๋ ์ ์๊ณ ์์๋ ์ฌ์ฉํ๋ค.
let b = a as string;
as
๋ฅผ ์ฌ์ฉํด ํ์คํ๊ฒ ํ์
์ ๋จ์ธํด์ค ์ ์๋ค.
ํ์ ๊ฐ๋
interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
age: number;
}
function introduce(): Developer | Person {
// ํฉ์งํฉ์ธ๊ฒ๋ค์ ๋ค ๊ฐ์ฒด์ ๋ด์์ ๋ฆฌํด์ ํด๋,
return { name: 'Tony', age: 33, skill: 'IronMaking'}
}
var tony= introduce();
console.log(tony.skill); //์๋ฌ๋๋ค. ๊ต์งํฉ์ด ์๋๊ฑด.
์ด๋ด๋ ์์์ ๋ฐฐ์ด ํ์ ๋จ์ธ์ ์ด์ฉํ๋ฉด
if ((tony as Developer).skill) {
console.log((tony as Developer).skill);
} else if ((tony as Person).age) {
console.log((tony as Person).age);
}
์ด์ ๊ฐ์ด ํด๋น ์์ฑ์ด ์๋์ง ํ์ธํ ํ์ ์คํ์ ํ ์ ์๋ค. ํ์ง๋ง ๊ฐ๋ ์ฑ์ด ๋งค์ฐ ์์ข์์ง.
๊ทธ๋์ ํ์ ๊ฐ๋๋ผ๋๊ฑธ ์ฌ์ฉํ๋๋ฐ,
function isDeveloper(target: Developer | Person): target is Developer {
return (target as Developer).skill !== undefined; // T of F
}
target is Developer
: ๋๊ฒจ๋ฐ์ ํ๋ผ๋ฏธํฐ(target)์ด Developer ํ์
์ธ์ง ๊ตฌ๋ถํ๋ค
if (isDeveloper(tony)) {
console.log(tony.skill);
} else {
console.log(tony.age);
}
์ด๋ฐ์์ผ๋ก ๋ถ์ธ๊ฐ์ ์ ๋ฌ๋ฐ์ ๋ถ๊ธฐํด์ ์งํํ ์ ์๋ค.
ํ์ ํธํ
interface Developer {
name: string;
skill: string;
}
interface Person {
name: string;
}
var developer: Developer;
var person: Person;
person = developer; // ์ค๋ฅ (ํธํ ์๋จ)
developer = person; // ํธํ ๋จ
์ด๋ฐ๊ฒ๋ค์ ๊ตฌ์กฐ์ ํ์ดํ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ํ์ ์ด ์๋ก ํธํ๋๋์ง์ ์ฌ๋ถ๋ฅผ ํ๋จํ๋ ๊ฒ. ์ธํฐํ์ด์ค ์ธ์๋ ํด๋์ค, ํจ์, ์ ๋ค๋ฆญ ๋ฑ์๋ ๋๊ฐ์ด ์ ์ฉ๋๋ค.
interface NotEmpty<T> {
data: T;
}
var notempty1: Empty<string>;
var notempty2: Empty<number>;
notempty1 = notempty2 // ์ค๋ฅ (ํธํ ์๋จ)
notempty2 = notempty1 // ์ค๋ฅ (ํธํ ์๋จ)