Types

νƒ€μž… μ •μ˜ 방법

:λ₯Ό μ΄μš©ν•˜μ—¬ νƒ€μž… μ •μ˜: Type Annotation

Javascript Basic Types

const num: number = -6;
const str: string = 'hello';
let str1: 'hi' | 'hello' | 'hey' = 'hi';
const boal: boolean = false;
let age: number | undefined;
let person2: string | null;
let obj: object; // 선언은 κ°€λŠ₯ν•˜μ§€λ§Œ μ΄λŠ” λͺ¨λ“  객체가 λ‹€ λ“€μ–΄μ˜¬ 수 μžˆμ–΄μ„œ νš¨μš©μ„±μ΄ μ—†λ‹€.
let person: {name: string, age: number} = {
	name: 'Crystal',
	age: 20
};
let arr: number[] = [1,2,3];
let arr: Array<number> = [1,2,3];

Function definition

function add(num1: number, num2: number): number {
    return num1 + num2;
}

// optional parameter
function printName(firstName: string, lastName?: string) {
  console.log(firstName);
  console.log(lastName); // undefined
}

// default parameter
function printMessage(message: string = 'default message') {
  console.log(message);
}

// Rest parameter
function addNumbers(...numbers: number[]): number {
  return numbers.reduce((a, b) => a + b);
}

Typescript Types

// unknown: 무슨 νƒ€μž…μ΄ μ˜€λŠ”μ§€ λ‚˜λŠ” λͺ¨λ₯Έλ‹€. 즉, λͺ¨λ“  νƒ€μž…μ΄ 올 수 μžˆμ–΄ νš¨μš©μ„± μ—†μŒ
let notSure: unknown = 0;

// any: μ–΄λ–€ νƒ€μž…μ΄λ“  담을 수 μžˆλ‹€. 이 μ—­μ‹œ λͺ¨λ“  νƒ€μž…μ΄ 올 수 μžˆμ–΄ νš¨μš©μ„± μ—†μŒ
let anything: any = 0;

// void: ν•¨μˆ˜μ—μ„œ 아무 것도 λ¦¬ν„΄ν•˜μ§€ μ•ŠμŒμ„ 의미
 function print(): void {
 console.log('hello');
 return;
}
let unuseful: void = undefined; // μ˜λ―Έκ°€ μ—†λŠ” μ½”λ“œ..

// never: ν•¨μˆ˜μ—μ„œ 리턴을 μ„ μ–Έν•˜μ§€ μ•ŠμŒμ„ 의미(ν•¨μˆ˜κ°€ λλ‚˜μ§€ μ•ŠμŒμ„ 의미)
 function throwError(message: string): never {
  // message -> server (log)
  // 1) throw new Error(message);
  // 2) while (true) {}
}

// Tuple: λ°°μ—΄μ˜ 길이가 κ³ μ •λ˜κ³  각 μš”μ†Œμ˜ νƒ€μž…μ΄ μ§€μ •λ˜μ–΄ μžˆλŠ” λ°°μ—΄ ν˜•μ‹.
// μ‚¬μš©μ„ ꢌμž₯ν•˜μ§€ μ•ŠμŒ. μ™œλƒν•˜λ©΄ 가독성이 많이 떨어짐.
// interface, type alias, Object, class ν˜•νƒœλ‘œ μ‚¬μš©ν•  것을 ꢌμž₯.
let arr: [string, number] = ['hi', 10];

// Enum: νŠΉμ • κ°’(μƒμˆ˜)λ“€μ˜ 집합
// .μ΄λ‚˜ 인덱슀 번호둜 접근이 κ°€λŠ₯ν•˜λ©°, 인덱슀λ₯Ό μ‚¬μš©μž 편의둜 변경도 κ°€λŠ₯ν•©λ‹ˆλ‹€.
// μ‚¬μš©μ„ ꢌμž₯ν•˜μ§€ μ•ŠμŒ. μ™œλƒν•˜λ©΄ μˆ«μžν˜• μ΄λ„˜μ€ 값을 μž¬ν• λ‹Ήν•  수 μžˆμ–΄ μ˜€μ—Όμ˜ μœ„ν—˜μ΄ 있고, tree shaking이 μ•ˆλ˜λŠ” λ¬Έμ œλ„ μžˆλ‹€.
// λ‹€λ₯Έ λͺ¨λ°”일 ν΄λΌμ΄μ–ΈνŠΈμ™€ λ§žμΆ°μ•Ό ν•  λ•Œ λΆ€λ“μ΄ν•˜κ²Œ μ‚¬μš©.
// λŒ€μ•ˆμœΌλ‘œ type alias union type을 μ‚¬μš©ν•˜κ±°λ‚˜ 객체λ₯Ό as const ν˜•νƒœλ‘œ μ‚¬μš©κ°€
enum Avengers { Capt = 2, IronMan, Thor }
let hero: Avengers = Avengers.Capt;
let hero2: Avengers = Avenger[2] // Capt

Type alias

μƒˆλ‘œμš΄ νƒ€μž…μ„ μ •μ˜ν•¨. λͺ¨λ“  데이터 νƒ€μž…μ„ μ •μ˜ν•  수 있으며, μΆ”κ°€λ‘œ String Literal Types도 κ°€λŠ₯함.

type Text = string;
const name: Text = 'sujeong';

type Student = {
  name: string;
  age: number;
};
const student: Student = {
  name: 'ellie',
  age: 12,
};

// String Literal Types
type Status = 'loading' | 'success' | 'failure';
let status: Status = 'loading';

Type Inference

νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ νƒ€μž…μ„ μžλ™μœΌλ‘œ 좔둠함.

Type Assertion

νƒ€μž…μ„ λͺ…μ‹œμ μœΌλ‘œ 지정해 쀌

function jsStrFunc(): any {
    return 2;
}
const result = jsStrFunc();
console.log((result as string).length);
console.log((<string>result).length);

Last updated

Was this helpful?