κΉν TIL λ ν¬μ κΈ°λ‘νλ λ΄μ©μ μ 리νμ¬ λΈλ‘κΉ ν©λλ€.
Hello Typescript
νμ
μ€ν¬λ¦½νΈλ msκ° κ°λ°ν μλ°μ€ν¬λ¦½νΈμ νμ₯ μΈμ΄λ€. λμ μΈμ΄μΈ μλ°μ€ν¬λ¦½νΈμ λ€λ₯΄κ² μμλ€μ νμ
μ μ μν΄μ£Όλ μ μ μΈμ΄λ€. μ§κΈκΉμ§ μκ³ μλ λͺ¨λ μλ°μ€ν¬λ¦½νΈμ λ¬Έλ²μ μμλ₯Ό μ΄μ©ν μ μλ건 λ¬Όλ‘ μ΄κ³ , μλ°μ€ν¬λ¦½νΈλ‘ μ»΄νμΌ λλ νκ²½μμ λ³μ λ° κΈ°ν μμλ€μ νμ
μ΄ κ²°μ λλ€. λ°νμ νκ²½μμ νμ
μ΄ νμ
λλ μλ°μ€ν¬λ¦½νΈμ κ°μ₯ μ°¨λ³λλ λΆλΆμ΄λ€.
μ»΄νμΌ λ¨κ³μμ κ³λ°μμ μ€λ₯λ₯Ό κ°μ§νκΈ° λλ¬Έμ νλ‘κ·Έλ¨μ μλ¬λ₯Ό 미리 λ°©μ§ν μ μλ€. λκ΅°λ€λ VSCodeλ MSμμ κ°λ°ν μ½λ μλν°μ΄κΈ° λλ¬Έμ κΈ°λ³Έμ μΌλ‘ νμ
μ€ν¬λ¦½νΈλ₯Ό λ΄μ₯νκ³ μλ€. κ·Έλμ μλ¬ νμ§κ° VSCodeμμ λμ± νΈνλ€. λλ VSCodeμμ νμ
μ€ν¬λ¦½νΈλ‘ κ°λ°νκ³ μλλ°, μλν°κ° λλν΄μ‘λ€λ λλμ λ°λλ€.
νμ
μ΄ μ μλ ν΄λμ€λ κ°μ²΄ λ΄λΆμ λ©μλλ₯Ό μλμΌλ‘ 미리 λ³Ό μ μλ€. λͺ¨λλ‘ λΆλ¬μμ§ ν¨μμ μ λ κ²½λ‘λ₯Ό λ°λ‘ νμ
ν΄μ ν΄λΉ νμΌλ‘ λ°λ‘ μ°Ύμκ° μ μκ² ν΄μ€λ€. (mac νκ²½μμλ cmd + ν΄λ¦
) tabν€λ₯Ό ν΅ν΄μ λͺ¨λ λ¬Έμλ₯Ό λ€ μΉμ§ μκ³ apiλ₯Ό μ ννκ² μμ±ν΄μ£ΌκΈ°λ νκ³ , import λμ§ λͺ»ν λͺ¨λμ μλμΌλ‘ λΆλ¬μ¬ μ μλ€.
function hello(name: string, age: number): string {
return `hello, my name is ${name} and ${age} years old.`;
}
hello('kang', '28'); // Error: '28'μ numberμ ν λΉ λ μ μμ΅λλ€.
νμ μ€ν¬λ¦½νΈ κΈ°λ³Έ νμ
String, Number, Boolean νμ
μ λ§ κ°λ¨νκ² λ³μμ μ€λ₯Έμͺ½μ νμ
μ μ μ΄μ£Όλ©΄ λλ€. let ν€μλλ‘ μ μΈνκ³ ν λΉν λ³μλ κ΅³μ΄ μ΄λ κ² νμ
μ κΌ μ μ΄μ£Όμ§ μμλ νμ
μ€ν¬λ¦½νΈκ° μλμΌλ‘ νμ
μ μΆλ‘ νλ€. const λ³μλ μ‘°κΈ μμΈκ° μλ€.
// String
let str: string = 'hankyeol';
// Number
let num: number = 28;
// Boolean
let bool: boolean = true;
Array, Tuple, Enum νμ
λ°°μ΄μ μ΅μνλ°, νν, μ΄λ(Enum)μ μλ°μ€ν¬λ¦½νΈ κ°λ°μμκ² μ‘°κΈ μμν μ μλ€. λλ κ·Έλ¬λ€.
- ννμ λ°°μ΄νμμ κΈΈμ΄κ° κ³ μ λκ³ , μμλ§λ€ νμ μ΄ μ§μ λμ΄ μλ νμ μ λ§νλ€.
- μ΄λ(Enum)μ νΉμ ν κ°, μμλ€μ μ§ν©μ λνλ΄λ νμ μ΄λ€. κ°λ°μκ° μμλ€μ μΈλ±μ€λ₯Ό μ§μ ν΄ μ€ μ μλ€λ νΉμ§μ κ°μ§λ€.
// Array νμ
μ μλ 2κ°μ§ λ°©λ² λ€ μ¬μ©ν μ μλ€.
let arr: number[] = [1, 2, 3];
let arr: Array<number> = [1, 2, 3]; // μ λ€λ¦ λ¬Έλ²
// Tuple
let arr: [string, number] = ['hankyeol', 28];
arr[3]; // -> Error: 3λ² μΈλ±μ€λ μμ΅λλ€.
// Enum
enum Hankyeol {
DEVELOPER = 4,
KOREAN,
HUMAN
}
let language: Hankyeol = Hankyeol[5]; // KOREAN
Any, Void, Never νμ
- any νμ μ λ¨μ΄ λ» κ·Έλλ‘ λͺ¨λ νμ μΌλ‘ μΆλ‘ λ μ μλ νμ μ΄λ€. λ§λ² μ£Όλ¬Έκ³Ό κ°μ νμ μ΄μ§λ§ λͺ νν νμ μ μ ν΄μ£ΌκΈ° μ μ μ¬μ©νλ κ²μ΄ μ’λ€.
- voidλ κ°μ μ€μ ν μ μλ νμ μ΄λ€. λ³μμλ undefined, null κ°λ§ μ€μ ν μ μκ³ , ν¨μμ λ°ν νμ μΌλ‘ μ μλμ΄ λ¦¬ν΄ κ°μ΄ μλ€λ κ²μ μλ―Ένλ€.
- never νμ μ ν¨μ λ°ν νμ μΌλ‘ μ μλκ³ , μ΄ ν¨μμ λμ μ λ λλ¬νμ§ μλλ€λ μλ―Έλ₯Ό κ°μ§λ€. μ λμ¨ νμ κ³Ό λ³νν μμλ never νμ μ μκ±° λͺ©μ μΌλ‘ μ¬μ©νλ€.
// any
function login(id: any, password: any): boolean {
return true;
}
// void
function login(id: string, password: string): void {
console.log(id, password);
}
// never
function login(id: string, password: string): never {
while (true) {}
}
νμ μ€ν¬λ¦½νΈ ν¨μ νμ
ν¨μμ μΈμμ λ°νκ°μ νμ μ
νμ
μ€ν¬λ¦½νΈλ‘ ν¨μλ₯Ό μμ±ν λλ κ°λ³ μΈμ(νλΌλ―Έν°)μ ν¨μμ κ²°κ³Όκ°μ ν΄λΉνλ 리ν΄κ°μ νμ
μ μ ν΄μ€λ€.
νμ
μ€ν¬λ¦½νΈλ‘ μ μν ν¨μμ μΈμμ λν΄μ νΉλ³ν μ²λ¦¬κ° μλ€λ©΄ λͺ¨λ νμν μΈμλ‘ μΈμνλ€. μ΄ λ§μ ν¨μ μ²λ¦¬μ λ°λμ λ€μ΄κ°μ§ μλ μ΅μ
λν μΈμλΌλ undefined, null κ° μ²λ¦¬λ₯Ό ν΄μΌ νλ€λ κ²μ΄λ€. λ§€λ² κ·Έλ κ² ν΄μ£Όλ κ²μ νλλκΉ ?
κΈ°νΈλ₯Ό μ¬μ©ν΄μ μ΅μ
λν μΈμλΌλ κ²μ μλ €μ€ μ μλ€.
function login(id: stirng, password: string, nickname?: string): boolean {
// nicknameμ μ΅μ
λν μΈμλ‘ λ³Ό μ μλ€.
if (id && password) {
return true;
} else {
return false;
}
}
// rest parameterλ μ΄λ κ² μ¬μ©κ°λ₯νλ€.
function sum(num1: number, ...nums: number[]): number {
return ...
}
Typescriptμμ this
νμ
μ€ν¬λ¦½νΈλ‘ μ μν ν¨μμμ thisλ μΈμμ μ μΌ μμμ κ·Έ νμ
μ μ ν μ μλ€. thisλΌλ μ΄λ¦μΌλ‘ μ μνλ©΄ λλ€. ν¨μ μ체μ μΈμλ 2λ²μ§Έ μμλΆν° μμνλ κ²μ΄λ€.
function getParam(this: string, index: number): string {
const params = this.split(',');
if (index < 0 || params.length <= index) {
return '';
}
return this.split(',')[index];
}
ꡬ쑰λΆν΄ ν λΉμ μ΄μ©ν λ€μλ νλΌλ―Έν°
ν¨μμ νλΌλ―Έν°λ₯Ό ꡬ쑰λΆν΄νμ¬ κ°μ²΄ ννλ‘ κ°μΈλ μμΌλ‘ νμ
μ ν λΉ ν μ μλ€. μ΄ λ°©λ²μ propsλ₯Ό ν¨μ μΈμλ‘ λ§μ΄ μ λ¬νλ React μ»΄ν¬λνΈ μ½λμ μμ£Ό μ¬μ©λλ€.
ν¨μμ μΈμκ° μ‘°κΈ λ§μμ§λ€ μΆμΌλ©΄ ꡬ쑰λΆν΄μ κ°λ
μ μ μ΄μ©ν λ€μλ νλΌλ―Έν°λ₯Ό μ΄μ©ν΄μ£Όλ©΄ μ’λ€. λ μ°λ¦¬μ VSCodeλ ν¨μμ μΈμκ° λλΆλ¬μ§ κ²μ λ³΄κ³ λΉ λ₯΄κ² λ€μλ νλΌλ―Έν° νμμΌλ‘ λ³νν΄μ£Όλ μΉν κΈ°λ₯λ κ°μ§κ³ μλ€. VSCodeμμ ν¨μλ₯Ό μμ±νκ³ ν¨μ μ΄λ¦μ 컀μλ₯Ό κ°μ Έλ€ λλ©΄ μ΅μ
λ©λ΄κ° λ¬λ€.
function getText({
name,
age = 28,
language
}: {
name: string;
age: number;
language?: string;
}): string {
const nameText = name.substr(0, 10);
const ageText = age >= 35 ? 'seneir' : 'junior';
return `name: ${nameText}, age: ${ageTet}, language: ${language}`;
}
// μ¬μ©ν λμλ κ°μ²΄ννλ‘
getText({ name: 'hankyeolk', age: 26 });
κ°μ²΄ν νμ μμ μΈν°νμ΄μ€
μΈν°νμ΄μ€μ κΈ°λ³Έμ μΈ κ·μΉ
μΈν°νμ΄μ€λ νμ
μΌλ‘ μ μλ μ½μ, κ·μΉμ΄λΌκ³ λ³Ό μ μλ€. μ¦, μΈν°νμ΄μ€λ‘ λ€μν μμμ νμ
μ μ ν μ μλ€κ³ μκ°νλ©΄ νΈνκ² λ€.
- μΈν°νμ΄μ€λ‘ νμ μ interface ν€μλμ {} κ΄νΈλ‘ 리ν°λ΄ νλ κ²μ΄λ€. μΈν°νμ΄μ€μλ μ΅μ λν μμ±μ νμ μ μ§μ ν μ μλ€.(? κΈ°νΈ) λ§μ°¬κ°μ§λ‘ νλμ μμ±μ μλ‘ λ€λ₯Έ νμ μ μ§μ ν μλ μλ€.(or 쑰건과 κ°λ€)
- μΈν°νμ΄μ€ νμ μΌλ‘ μ μλ μμ±λ€μ μμκ° μλ€. μΈν°νμ΄μ€ νμ λ΄λΆμ μ μλμ§ μμ μμ±μ΄ μλ€λ©΄ κ·Έκ²μ νΈμΆνκ±°λ λ©μλ νμμΌλ‘ μ¬μ©ν λ, κ°μ λ³κ²½ν λ μλ¬ μ½λλ₯Ό λ³΄κ² λλ€.
interface Person {
name: string;
age?: number;
birthday: number | string;
}
μΈν°νμ΄μ€ μ½κΈ° μ μ© μμ±κ³Ό μΈλ±μ€ νμ
- μΈν°νμ΄μ€ νμ λ΄λΆμ μμ±μ μ½κΈ° μ μ© μμ±μ κ°μ§ μ μλ€. (readonly) μ½κΈ° μ μ©μΌλ‘ ν λΉλ μμ±μ κ°μ μ¬ν λΉμ΄ λΆκ°νλ€. μ μΈ μμ μλ§ κ°μ ν λΉν μ μλ€.
- μμ±μ λν μ΄λ¦μ μ μνμ§ μκ³ , κ°μ νμ
λ§ μ νλ μΈλ±μ€ νμ
μμ±μ΄ μλ€.
[key: νμ ]: νμ
ννλ‘ μΈν°νμ΄μ€ λ΄λΆμ μ 리λλ€. keyλΌκ³ νλ μ΄λ¦μλ μ무 λ¬Έμλ μλ λλ€. μμ± μ΄λ¦μ λν νμ μ κ²μ¦ν΄μ κ·Έ λμ νμ μ΄ μ°κ²°λ νμ κ³Ό μΌμΉνλμ§ νμΈνλ€. - μΈν°νμ΄μ€ μμ± μ΄λ¦μλ 'λ¬Έμμ΄', 'μ«μ'κ° μ¬ μ μλ€. μ«μλ‘ μ¨ μ΄λ¦μ λ΄λΆμ μΌλ‘ λ¬Έμμ΄λ‘ λ³νλμ΄μ μ¬μ©λλ€.
interface Book {
readonly name: string;
[key: string]: number | string;
}
const Onepiece: Book = {
name: 'dawn',
price: 4500 // index typeμ μν΄μ λ°μμ΄ λ μ μλ€.
};
Onepiece.name = 'moon'; // Error : μ½κΈ° μ μ© μμ±μ κ°μ΄ μ¬ν λΉ λ μ μλ€.
μΈν°νμ΄μ€λ‘ ν¨μ μ μνκΈ°
μΈν°νμ΄μ€λ‘ ν¨μ μ체μ νμ
μ μ μν μ μλ€. κ°λ³ νλΌλ―Έν°μ λν μ μλΆν° λ°νκ°κΉμ§ μ μ κ°λ₯νλ€. μΈν°νμ΄μ€λ‘ ν¨μμ νμ
μ μ μν λ, ν¨μ λ΄λΆ/μΈλΆμμ μ¬μ©λ ν¨μ μμ±κ°λ μ μν μ μλ€.
interface GetText {
(name: string, age: number): string;
totalCall?: number;
}
const getText: GetText = (name, age) => {
if (getText.totalCall !== undefined) {
getText.totalCall += 1;
}
return `totalcall : ${getText.totalCall}`;
};
getText.totalCall = 0;
getText('', 0); // -> totalcall : 1
μΈν°νμ΄μ€ νμ₯
μΈν°νμ΄μ€λ μΈν°νμ΄μ€ κ°μ extends ν€μλλ‘ νμ₯μ΄ κ°λ₯νλ€. νμ₯μ κ°λ
μ λ§κ² μμ± λ°λ μμμ λΆλͺ¨μ λͺ¨λ μμ±μ κ°μ§κ² λλ€. (κ°μ§κ³ μμ΄μΌ νλ€κ° λ§λ μ€λͺ
κ°λ€.) νλμ μΈν°νμ΄μ€λ μ¬λ¬κ°μ μΈν°νμ΄μ€λ‘λΆν° νμ₯ κ°λ₯νλ€.
λν &
κΈ°νΈλ₯Ό μ¬μ©ν΄μ μΈν°νμ΄μ€ μμ±μ λν κ΅μ§ν©κ²©μ μΈν°νμ΄μ€λ₯Ό λ§λ€ μ μλ€. μ‘°κΈ λ§μ΄ μ΄λ €μ΄λ°, &
κΈ°νΈλ₯Ό μ¬μ©ν΄μ μλ‘ λ€λ₯Έ μΈν°νμ΄μ€μ μλ μμ±μ λͺ¨λ κ°μ§λ μλ‘μ΄ μΈν°νμ΄μ€λ₯Ό λ§λ€ μ μλ€κ³ μκ°νλ©΄ νΈν κ² κ°λ€. μ΄λ κ² ν©μ³μ§ νμ
μ μΈν°μΉμ
νμ
μ΄λΌκ³ νλ€.
// interface extend
interface Person {
name: string;
age: number;
}
interface Developer {
favoriteLang: string;
}
interface Hankyeol extends Person, Developer {
liveInSeoul: true;
}
// intersection type
interface Post {
name: string;
postId: number;
}
type PP = Person & Post; // Person interfaceμ ν©μ³€λ€.
const pp: PP = {
name: 'hankyeol',
age: 28,
postId: 19
};