TypeScript κΈ°λ³Έ
πΒ JSμ λ¬Έμ μ
μλ£νμ λλλλ κ³μ°μ μννλ€.λ°λΌμ λ€μκ³Ό κ°μ μ½λμμ μλ¬λ₯Ό 보μ¬μ£Όμ§ μλλ€.νμ
μ€ν¬λ¦½νΈμμλ λ€μκ³Ό κ°μ΄ μλ¬λ₯Ό 보μ¬μ€λ€.TS μ»΄νμΌ λ°©λ²
npx tsc (νμΌμ΄λ¦).tstsc -wκ·Έλ¬λ Reactμμ μ¬μ© μ μ μ΄μ typescriptλ‘ μΈν
νλ©΄ μ΄λ¬ν κ²λ€μ ν΄μ£Όμ§ μμλ λλ€.π₯Β κΈ°λ³Έ νμ
κΈ°λ³Έ νμ
μ§μ λ°©λ²
const car: string = 'bmw';
const age: number = 30;
const a: number[] = [1, 2, 3];
const a2: Array<number> = [1, 2, 3];
const week1: string[] = ['mon', 'tue', 'wed'];
const week2: Array<string> = ['mon', 'tue', 'wed'];
week1.push(1);
κΈ°λ³Έμ μΈ JSλ¬Έλ²μμ λ³μλͺ
λ€μ :λ₯Ό μ΄μ©νμ¬ νμ
μ λΆμ¬μ€λ€.ν΄λΉ λ³μμλ λΆμ¬μ€ νμ
μ λ°μ΄ν°λ§ ν λΉν μ μλ€.λ°λΌμ μ μ½λμμ week1 λ°°μ΄μ μ«μ νμ
λ°μ΄ν°λ₯Ό pushνλ©΄ μλ¬κ° λλ€.λ°°μ΄μ νμ
μ λ°μ΄ν°νμ
[] λλ Array<λ°μ΄ν°νμ
>μΌλ‘ κ²°μ ν μ μλ€.νν (Tuple)
let b: [string, number];
b = ['abc', 1];
b = [1, 'abc'];
b[0].toLowerCase();
b[1].toLowerCase();
ννμ κ° μμμ νμ
μ΄ κ³ μ λ λ°°μ΄μ΄λ€.ννμ λ°°μ΄μ κΈΈμ΄λ κ³ μ λμ΄ μλ€.μ μ½λμμ bλΌλ λ°°μ΄μ 0λ² μΈλ±μ€μλ string νμ
λ§, 1λ² μΈλ±μ€μλ number νμ
λ§ ν λΉ λ μ μλ€.λ°λΌμ 0λ² μΈλ±μ€μ number νμ
μ ν λΉνλ©΄ μλ¬κ° λλ€..toLowerCase()λ string νμ
μλ§ μ¬μ©ν μ μλ λ©μλ μ΄λ―λ‘ b[1](number νμ
)μ ν΄λΉ λ©μλλ₯Ό μ¬μ©νλ©΄ μλ¬κ° λλ€.Null, Undefined
const n: null = null;
const u: undefined = undefined;
null λλ undefined νμ
λ μ μΈν΄μ€ μ μλ€.Enum
Enum(μ΄κ±°ν)μ μ°κ΄λ μμ΄ν
λ€μ λ¬Άμ΄μ ννν μ μλ μλ¨μ΄λ€.enum Os {
Window,
Ios,
Android,
}
let myComputer: Os;
myComputer = Os.Window;
myComputer = 'Window';
console.log(myComputer);
μμλ‘ Os λΌλ enumμ μμ±νλ©΄, μ΄λ₯Ό νμ
μ²λΌ μ¬μ©ν μ μλ€.enumμ μ΄λ¦μ myComputerλΌλ λ³μμ νμ
μΌλ‘ μ μΈνλ©΄ ν΄λΉ enumμ λ΄μ©λ§ ν λΉν μ μλ€.λ°λΌμ λ¬Έμμ΄λ‘ βWindowβλΌκ³ μ μ΄μ ν λΉνλ€κ³ ν΄λ μλ¬κ° λλ€.κ·Έλ°λ° μ¬κΈ°μ myComputerλ₯Ό μ½μμ μ°μμ λ 0μ΄ λμ€λ μ΄μ λ ν΄λΉ enumμ΄ μ«μ μ΄κ±°νμ΄κΈ° λλ¬Έμ΄λ€.
enum Os {
Window = 1,
Ios,
Android = 10,
}
console.log(Os.Window);
console.log(Os.Ios);
console.log(Os.Android);
enumμ κ° ν€μλλ€μ΄ κ°μΌλ‘ κ°λ μ«μλ λ€μμ²λΌ μ§μ ν΄μ€ μ μλ€.μ§μ λμ§ μμΌλ©΄ μ΄μ κ°μ λ€μ κ°μ κ°μ§λ€.
enum Os {
Window = 'Window',
Ios = 'Ios',
Android = 'Android',
}
console.log(Os.Window);
console.log(Os.Ios);
console.log(Os.Android);
λ¬Έμμ΄ μ΄κ±°νμΌλ‘ μμ²λΌ μ μΈνλ©΄ κ°κ°μ ν€μλκ° λ¬Έμμ΄μ κ°μΌλ‘ κ°λλ‘ ν μ μλ€.Any
λͺ¨λ νμ
μ λνμ¬ νμ©νλ€.κΈ°μ‘΄ μλ°μ€ν¬λ¦½νΈλ‘ μλνλ μλΉμ€λ₯Ό μ μ§μ μΌλ‘ TSλ‘ λ³νν λ νμ©λλ€.let str: any = 'hi';
let num: any = 12;
let arr: any = [1, 2];
Object
κ°μ²΄λ λ€μμ²λΌ νμ
μ μ ν΄ μ€ μ μλ€.let jkeObj: { name: string; age: number; hobbies: string[] } = {
name: 'jke',
age: 27,
hobbies: ['Music', 'BasketBall'],
};
νμ
μ μ§μ νλ λΆλΆμμλ , λμ ;λ₯Ό μ¬μ©νλ€.Union
μ¬λ¬ νμ
λλ κ°μ΄ λ€μ΄μ¬ μ μλλ‘ ν μ μλ€.
let unionType: number | string | number[] = 1;
unionType = 'jke';
unionType = 1;
unionType = [1, 2, 3];
let gender: 'M' | 'F' = 'M';
gender = 'F';
gender = 'T';
Void
function sayHello(): void {
console.log('hello');
}
ν¨μκ° μ무κ²λ λ°ννμ§ μλ κ²½μ°, void νμ
μΌλ‘ μ μΈν΄μ€ μ μλ€.μ μ½λμ²λΌ μ μΈν΄μ£Όλ©΄ ν΄λΉ ν¨μκ° λ¬΄μΈκ°λ₯Ό return νλ €κ³ ν κ²½μ° μλ¬κ° λλ€.ν΄λΉ μμΉμ λ€λ₯Έ νμ
μ μ μΈνλ©΄ ν΄λΉ νμ
λ§ λ¦¬ν΄ν μ μλ€.Never
function showError(): never {
throw new Error();
}
function infLoop(): never {
while (true) {
}
}
ν¨μμ return νμ
μΌλ‘ never νμ
μ μ μΈν΄μ€ κ²½μ° νμ μ€λ₯λ₯Ό μΆλ ₯νκ±°λ λ¦¬ν΄ κ°μ μ λλ‘ λ΄λ³΄λ΄μ§ μμμ μλ―Ένλ€.μ΄λ₯Ό λ³μμ μ§μ νλ©΄ never κ° μλ νμ
μ ν λΉν μ μλ€.Unknown
let variable: unknown
variable = true
variable = 1
variable = 'string'
variable = {}
let anyType: any = variable
let booleanType: boolean = variable
let numberType: number = variable
let stringType: string = variable
let objectType: object = variable
unknown νμ
μ anyμ²λΌ λͺ¨λ νμ
μ νμ©νλ€.νμ§λ§ anyλ νμ
κ²μ¬λ₯Ό λμ¨νκ² νμ¬ μ ν리μΌμ΄μ
μμ μκΈ°μΉ λͺ»ν λ¬Έμ κ° λ°μν κ°λ₯μ±μ΄ λλ€.unknownμ μ μμ μ²λΌ νμ
μ 체ν¬ν΄μ£ΌκΈ° λλ¬Έμ anyλ³΄λ€ μ¬μ©μ΄ κΆμ₯λλ€.π¦Β Advanced Type
literal type
λ²μ©μ μΈ string, number λ±μ νμ
μ΄ μλλΌ μ νν κ°μ νμ
μΌλ‘ μ§μ ν μ μλ€.constλ₯Ό μ¬μ©ν΄ numberλ string λ±μ μ μΈνλ©΄ literal typeμΌλ‘ μΆλ‘ λλ€.let age:3 = 3;
age = 5;
let name:"jke" = "jke";
name = "jkejkejke"
const age = 1;
const name = "jke"
as const
νμ
μ literalλ‘ μ νν μ§μ ν λ μ¬μ©νλ€.μ΄λ κ² μ§μ νλ©΄ μμλ‘ μ§μ ν κ°μ λ€λ₯Έ νμΌμμ μμ±ν λλ λ³Ό μ μμ΄ νΈνλ€.const numbers = [1,2,3]
const numbers = [1,2,3] as const
const obj = {x:1, y:2}
const obj = {x:1, y:2} as const
Generic
νμ
μ μΈμμ²λΌ νμ©ν μ μλ€.μλ μν©μμλ ν΄λΉ ν¨μμ μ΄λ€ νμ
μ arrayκ° λ€μ΄μ¬ μ§ λͺ¨λ₯΄λ μν©μ΄μ§λ§ arrayλ numberμ arrayλ‘ μ μλμ΄ μλ€.function map(array:number[], callback:(...args:any[]) => any;) {
const result = [];
for(const element of array){
result.push(callback(element));
};
return result;
}
map([1,2,3,4], x => x + 1);
map(["hello", "world"], x => x.toUpperCase());
μ΄λ κ² λλ©΄ λ¬Έμμ΄λ‘ λ arrayλ₯Ό map ν¨μμ μΈμλ‘ λ£μ΄ μ¬μ©νκ³ μΆμ κ²½μ° λ λ€λ₯Έ map ν¨μλ₯Ό λ§λ€μ΄μ£Όμ΄μΌ νλ€.μ΄μ κ°μ μν©μ ν΄κ²°νκΈ° μν΄ Genericμ μ¬μ©ν μ μλ€.function map<T>(array:T[], callback:(...args:any[]) => any;) {
const result = [];
for(const element of array){
result.push(callback(element));
};
return result;
}
map<number>([1,2,3,4], x => x + 1);
map<string>(["hello", "world"], x => x.toUpperCase());
μ΄λ κ² νλ©΄ mapν¨μλ₯Ό μ¬μ©ν λμ νμ
μ λ°μ κ·Έ νμ
μ΄ arrayμ νμ
μΌλ‘ μ§μ λλλ‘ ν μ μλ€.Tλ μμμ μ΄λ¦μ΄κ³ λ€λ₯Έ μ΄λ¦μ μ¬μ©ν΄λ λλ€.keyof
κ°μ²΄ νμ
μμ keyλ§ μΆμΆνλ λ°©λ²μ΄λ€.type People = {name: string, age:number, gender:"male" | "female", hobby:string};
type KeyOfPeople = keyof People;
const key:KeyOfPeople = 'name';
const key2:KeyOfPeople = 'email';
μ£Όμν μ μ objectμ μ°λ κ²μ΄ μλλΌ typeμ μ°λ κ²μ΄λ€.typeof
κ°μ²΄ λ± κ°μμ νμ
μ μΆμΆνλ λ°©λ²μ΄λ€.const jke = {
name:"jke",
age:27,
gender:"male",
hobby:"basketball"
};
type People = typeof jke;
type KeyOfPeople = keyof typeof jke;
narrowing
ifλ¬Έ λ±μ μ¬μ©νμ¬ νμ
μ λ²μλ₯Ό μ’νλ λ°©λ²μ΄λ€.function toUpper(arg:string | number){
arg.toUpperCase()
}
function toUpper(arg:string | number){
if(typeof arg === "string"){
arg.toUpperCase()
}
}
function addFive(num?:number){
return num + 5;
}
function addFive(num?:number){
if(num){
return num + 5
} else {
throw new Error("Argument num is not a number")
}
}
πͺΒ Interface
Typeμ λ³μμ λ£μ΄μ μ¬μ©
νμ
μ체λ₯Ό λ³μμ λ£μ΄μ μ¬μ©ν μ μλ€.
type numOrStr = string | number;
let data: numOrStr = 1;
data = '1';
let typeArr: numOrStr[] = [1, '2', 3, '4'];
type grade = 'A' | 'B' | 'C' | 'D' | 'E';
const jkeGrade: grade = 'A';
κΈ°λ³Έ μ¬μ©λ²
TSμμ 볡μ‘ν κ°μ²΄λ₯Ό μ¬μ©ν λ Interface μ¬μ©νλ€.Interfaceλ typeκ³Ό λ€λ₯΄κ² κ°μ²΄μλ§ μ¬μ©ν μ μλ€.μΌλ° Typeκ³Ό ꡬλΆνκΈ° μνμ¬ μ²«κΈμλ₯Ό λλ¬Έμλ‘ μ¬μ©νλ€.interface User {
name: string;
id: string;
age: number;
isMember: boolean;
}
const jkeInfo: User = {
name: 'jke',
id: 'j56237',
age: 27,
isMember: true,
};