-
TypeScript νμ μ€ν¬λ¦½νΈ κΈ°μ΄ -1π FrontEnd/TypeScript 2022. 11. 8. 20:08
μμνλ©΄μ
νμ μ€ν¬λ¦½νΈμ κΈ°μ΄λ₯Ό 곡λΆν©λλ€.
TypeScript λ?
2012λ λ§μ΄ν¬λ‘μννΈκ° λ°νν νμ μ€ν¬λ¦½νΈ(TypeScript)λ μλ°μ€ν¬λ¦½νΈ(JavaScript)λ₯Ό κΈ°λ°μΌλ‘ μ μ νμ λ¬Έλ²μ μΆκ°ν νλ‘κ·Έλλ° μΈμ΄μ λλ€.
μ»΄νμΌ μΈμ΄, μ μ νμ μΈμ΄
- μλ°μ€ν¬λ¦½νΈλ λμ νμμ μΈν°νλ¦¬ν° μΈμ΄λ‘ λ°νμμμ μ€λ₯λ₯Ό λ°κ²¬ν μ μμ΅λλ€.
- μ΄μ λ°ν΄ νμ μ€ν¬λ¦½νΈλ μ μ νμ μ μ»΄νμΌ μΈμ΄μ΄λ©° νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬ λλ λ°λ²¨(Babel)μ ν΅ν΄ μλ°μ€ν¬λ¦½νΈ μ½λλ‘ λ³νλ©λλ€.
- μ½λ μμ± λ¨κ³μμ νμ μ 체ν¬ν΄ μ€λ₯λ₯Ό νμΈν μ μκ³ λ―Έλ¦¬ νμ μ κ²°μ νκΈ° λλ¬Έμ μ€ν μλκ° λ§€μ° λΉ λ₯΄λ€λ μ₯μ μ΄ μμ΅λλ€. νμ§λ§ μ½λ μμ± μ λ§€λ² νμ μ κ²°μ ν΄μΌ νκΈ° λλ¬Έμ λ²κ±°λ‘κ³ μ½λλμ΄ μ¦κ°νλ©° μ»΄νμΌ μκ°μ΄ μ€λ κ±Έλ¦°λ€λ λ¨μ μ΄ μμ΅λλ€.
μλ°μ€ν¬λ¦½νΈ μνΌμ (Superset)
- νμ μ€ν¬λ¦½νΈλ μλ°μ€ν¬λ¦½νΈμ μνΌμ , μ¦ μλ°μ€ν¬λ¦½νΈ κΈ°λ³Έ λ¬Έλ²μ νμ μ€ν¬λ¦½νΈμ λ¬Έλ²μ μΆκ°ν μΈμ΄μ λλ€.
- λ°λΌμ μ ν¨ν μλ°μ€ν¬λ¦½νΈλ‘ μμ±ν μ½λλ νμ₯μλ₯Ό .jsμμ .tsλ‘ λ³κ²½νκ³ νμ μ€ν¬λ¦½νΈλ‘ μ»΄νμΌν΄ λ³νν μ μμ΅λλ€.
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° μ§μ
- νμ μ€ν¬λ¦½νΈλ ES6(ECMAScript 6)μμ μλ‘κ² μ¬μ©λ λ¬Έλ²μ ν¬ν¨νκ³ μμΌλ©° ν΄λμ€, μΈν°νμ΄μ€, μμ, λͺ¨λ λ±κ³Ό κ°μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° ν¨ν΄μ μ 곡ν©λλ€.
Static Typing(μ μ νμ΄ν)?
- νμ μ λ§λ κ°λ§ ν λΉ/λ°ν λμ΄μΌνλ€λ λ»μ λλ€.
μμ μ ν¨κ» 곡λΆνλ TypeScript
ex1)
let num:number = 10; console.log(num); // 10 let name1 = 'happy'; // ':νμ ' μ μλ΅νλ€λ©΄ μ΄κΈ°κ°μμ type μ΄ μ ν΄μ§λ€ // name1 = 10; // μλ¬νμ console.log(name1); // 'happy' function add(num1:number, num2:number){ console.log(num1+num2); } //add(); // μλ¬νμ //add(1); // μλ¬νμ add(1,2); // 3 //add(1,2,3); // μλ¬νμ //add('hello', 'world'); // μλ¬νμ
ex1-1)
function showItems(arr:number[]){ arr.forEach((item) => { console.log(item); }); } showItems([1,2,3]); // showItems('νκΈΈλ'); // μλ¬νμ Argument of type 'string' is not assignable to parameter of type 'number[]'. // let ary : string[] = ['aaa', 'bbb', 'ccc']; // showItems(ary); // μλ¬νμ Argument of type 'string[]' is not assignable to parameter of type 'number[]'. Type 'string' is not assignable to type 'number'.
TypeScript κΈ°λ³Έ νμ μ§μ λ°©λ²
let car:string = 'BMW'; let age:number = 100; let isAdult:boolean = true; let num:number[] = [1,2,3,4,5,]; let num2:Array<number> = [100,200,300]; let str:string[] = ['μ¬κ³Ό','λ°°','μ°ΈμΈ','μλ°']; let str2:Array<string> = ['λμ₯κ³ ','μ μκΈ°','μμ΄μ»¨','곡기μ²μ κΈ°']; let obj:{name:string} = {name : 'kim'} ; let obj2:{name:string, age:number, weight: number} = {name : 'kim', age: 50, weight: 100} ; // let obj3:{a:string, b:number, c: number} = {name : 'kim', age: 50, weight: 100} ; // μμ± κ°μ μ΄λ¦μ λ§μΆ°μ£Όμ§ μλλ€λ©΄ λ°λ‘ μλ¬ let val:string | number = 'kim'; // λ¬Έμ λλ μ«μλ₯Ό λͺ¨λ λ°μ μ μλ€ val = 1000; console.log(val); // car = 100; // type μλ¬ λ°μ car:string // age = 'νκΈΈλ'; // type μλ¬ λ°μ age:number // num[0] = 'κΉμΉ'; // type μλ¬ λ°μ num:number[] // str[0] = true; // type μλ¬ λ°μ str:string[] // obj.name = 100; // type μλ¬ λ°μ obj:{name:string}
| (or)
function showItems(arr:number[] | string[]){ arr.forEach((item) => { console.log(item); }); } showItems([1,2,3]); showItems(['νλ¦°μ€μ‘', 'μ λ¨μ']);
any
let a:any = 100; a = 'νκΈΈλ'; a = true;
νν(Tuple)
- μ§μ μνλ typeμ μ μΈν΄μ λμ λ§μΆ° μ§μ ν΄ μ€ μ μμ΅λλ€.
type Member = [number, boolean]; // νμ λ§ μ§μ νλ€ (첫κΈμ λλ¬Έμ κΆμ₯) type Aaa = number | string; let c:Aaa; c = 100; c = 'νκΈΈλ'; let a:[string, number] = ['νκΈΈλ', 100]; a = ['k',1]; // a = [1,'k']; // μλ¬λ°μ -> μμκ° λ€λ₯΄λ€ let b:number[] = [1, 2, 3, 4, 5]; a[0].toUpperCase(); // a[1].toUpperCase(); // μλ¬λ°μ -> μ«μλ toUpperCaseλ₯Ό μ¬μ©ν μ μμ΄μ let kim:Member = [123, true]; kim = [100, false]; // kim = ['νκΈΈλ', 100]; // μλ¬λ°μ -> μμκ° λ€λ₯΄κ΅¬λ
Void - ν¨μμμ 리ν΄κ°μ΄ μμ λ
- 리ν΄κ°μ μ€μ ν΄μ£Όλ μ΄μ λ? μ¬λ°λ₯Έ κ°μ μ»κΈ° μν΄μμ λλ€.
function sayHello():void{ console.log('hello'); // return 100; } function sayHello2():number{ return 100; // return 'hello'; // μλ¬ λ°μ -> type μ΄ λ§μ§ μλ€ } function sayHello3(a:number, b:number):number{ return a+b; } sayHello(); console.log(sayHello2()); console.log(sayHello3(100,200));
νμ΄ν ν¨μμμ 리ν΄κ°μ typeμ μ ν΄μ€ λ
const isGreater = (a: number, b: number): boolean => { return a > b; } console.log(isGreater(100,200));
null , undefined
- μ΄λ€ κ°μ΄λ “λ°μ μ μλ€” λ₯Ό μλ―Έν©λλ€.
let a:null = null; let b:undefined = undefined; a=100; //μλ¬λ°μ b=100; //μλ¬λ°μ
object (κ°μ²΄) 1
type Member = { name : string, tel : string, add : string } let kim:Member = { name:'kim', tel:'010-0000-0000', add:'μμΈ'}; // μλ λ€μμ κ°λ€ let kim:{name: string, tel: string, add: 'μμΈ'} = { name:'kim', tel:'010-0000-0000', add:'μμΈ'}; console.log(kim.name, kim.tel, kim.add);
object (κ°μ²΄) 2
type Member = { [key:string] : string // object μ νμ μ§μ ν΄μΌ ν μμ±μ΄ λ무 λ§λ€λ©΄ μ΄λ κ² μ μ΄μ£Όλ©΄ λλ€ // key λΌλ μ΄λ¦μ μμλ‘ μ§μ ν κ²μ΄κΈ° λλ¬Έμ λ€λ₯Έ μ΄λ¦μ μ€ μ μλ€. (νμ§λ§ λ³΄ν΅ key value λκΉ λ) } let kim:Member = { name:'kim', tel:'010-0000-0000', add:'μμΈ' }; console.log(kim.name, kim.tel, kim.add);
μΈν°νμ΄μ€(interface)μ λ€μν νμ©
let user:object; // let user:{name:string, age:number}; // λ§λλ μκ° κ°μ²΄μ νμ , μμ±μ νμ λ μ§μ μ ν΄μ£Όμ΄μΌ νλ€. // type Member = { name:string, age:number } // let user:Member{} user ={ name : 'νκΈΈλ', age : 30 } console.log(user.name , user.age); // μλ¬ -> κ°μ²΄μ μμ±μ νμ μ΄ μ§μ λμ§ μμμ
μΈν°νμ΄μ€ μ¬μ©
// type User = { // name : string, // age : number // } interface User { // type μ²λΌ νμ λ§λ€μ΄μ£Όλ μ©λμ΄λ€. κ°μ²΄λ κ°μ²΄ μ΄μμ μ©λλ‘ μ¬μ©ν λλ interfaceλ₯Ό μ¬μ©νλ€. name : string; age : number; // interface λ μΌνλ₯Ό μ¬μ©ν μ μμΌλ, μΌλ°μ μΌλ‘λ μΈλ―Έμ½λ‘ μ μ΄λ€. } let user : User = { name : 'νκΈΈλ', age : 30 } user.age=10; console.log(user.name , user.age);
?
- μ¬μ©ν΄λ λκ³ μν΄λ λλ μμ±μ ?μ΅μ μ μ¬μ©νλ€
interface User { name : string; age : number; gender? : string; } let user : User ={ name : 'νκΈΈλ', age : 30 } user.age=10; user.gender = 'male'; // μ΄κΈ°κ°μ μ£Όμ§ μμμ§λ§ gender? λ‘ μ²λ¦¬ν΄μ μλ¬ λ°μνμ§ μλλ€ console.log(user.name , user.age);
readonly (μ½κΈ° μ μ©)
- κ°μ μ½μ μλ μμ§λ§ μμ ν μλ μλ€ λ§μΉ const μ²λΌ…
interface User { name : string; age : number; gender? : string; readonly birthYear : number; } let user : User ={ name : 'νκΈΈλ', age : 30, birthYear : 2000 } user.age=10; user.gender = 'male'; // user.birthYear = 2022; //readonly μ΄κΈ°λλ¬Έμ μλ¬λ°μ console.log(user.name , user.age, user.birthYear);
μ«μλ‘ μ μλ μμ±
interface User { name : string; age : number; gender? : string; readonly birthYear : number; 1 : string; 2 : string; 3 : string; 4 : string; } let user : User ={ name : 'νκΈΈλ', age : 30, birthYear : 2000, 1 : 'A', 2 : 'B', 3 : 'C', 4 : 'F' } user.age=10; user.gender = 'male'; //user.birthYear = 2022; //readonly μ΄κΈ°λλ¬Έμ μλ¬λ°μ console.log(user.name , user.age, user.birthYear, user.gender, user[1], user[2], user[3], user[4]); // keyκ°μ΄ μ«μμΈ κ²½μ°μλ λκ΄νΈ μ°μ°μλ‘ μ κ·Όν΄μΌν¨
- μ΄λ κ²λ μ¬μ©ν μ μμ΅λλ€.
interface User { name : string; age : number; gender? : string; readonly birthYear : number; [key:number] : string; } let user : User ={ name : 'νκΈΈλ', age : 30, birthYear : 2000, 1 : 'A', 2 : 'B', 3 : 'C', 4 : 'F' } user.age=10; user.gender = 'male'; // user.birthYear = 2022; //readonly μ΄κΈ°λλ¬Έμ μλ¬λ°μ console.log(user.name , user.age, user.birthYear, user.gender, user[1], user[2], user[3], user[4]);
μ¬λ¬κ°μ κ°μ²΄ μμ±μ νλ²μ μ μνλ λ°©λ²
type Score = 'A' | 'B' | 'C' | 'D' | 'F'; // 5κ°μ νμ (λλ¬Έμ)λ§ μ¬μ© interface User { name : string; age : number; gender? : string; readonly birthYear : number; [key:number] : Score; // [key:number] : 'A' | 'B' | 'C' | 'D' | 'F'; // [key:number] : string; } let user : User ={ name : 'νκΈΈλ', age : 30, birthYear : 2000, 1 : 'A', 2 : 'B', 3 : 'C', 4 : 'F' } user.age=10; user.gender = 'male'; // user.birthYear = 2022; // readonly μ΄κΈ°λλ¬Έμ μλ¬λ°μ console.log(user.name , user.age, user.birthYear, user.gender, user[1], user[2], user[3], user[4]);
ν¨μ μ μ
interface Add { (x1: number, y1: number) : number; // (맀κ°λ³μ) : 리ν΄κ° -> 맀κ°λ³μ μ΄λ¦μ λ€λ₯Έμ΄λ¦μ μ¨λ μ무 μκ΄μ΄ μλ€. } const add : Add = function(x, y) { return x + y; } // μ΅λͺ ν¨μ λ²μ // const add = function(x:number, y:number):number { // return x + y; // } console.log(add(10, 20)); // 30 interface IsAdult{ (age:number): boolean; } const kim: IsAdult = (age) => { return age>19; } console.log(kim(30)); // true
'π FrontEnd > TypeScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
TypeScript νμ μ€ν¬λ¦½νΈ κΈ°μ΄ -2 (0) 2022.11.08 TypeScript νμ μ€ν¬λ¦½νΈ μ€μΉ λ° μ¬μ© (VScode μμ) (0) 2022.11.08