연습장

03. 정적 타이핑 본문

TypeScript

03. 정적 타이핑

js0616 2024. 8. 26. 16:05

https://poiemaweb.com/typescript-typing

 

TypeScript - Typing | PoiemaWeb

타입 선언은 코드 예측성을 향상시킨다. 또한 타입 선언은 강력한 타입 체크를 가능하게 하여 문법 에러나 타입과 일치하지 않는 값의 할당 등 기본적인 오류를 런타임 이전에 검출한다. VSCode와

poiemaweb.com

 

1. 타입 선언 (Type Declaration)

TypeScript는 아래와 같이 변수명 뒤에 타입을 명시하는 것으로 타입을 선언할 수 있다.

선언한 타입에 맞지 않는 값을 할당하면 컴파일 시점에 에러가 발생한다. 기본적인 오류를 런타임 이전에 검출한다.

 

// boolean
let isDone: boolean = false;

// null
let n: null = null;

// undefined
let u: undefined = undefined;

// number
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;

// string
let color: string = "blue";
color = 'red';
let myName: string = `Lee`; // ES6 템플릿 문자열
let greeting: string = `Hello, my name is ${ myName }.`; // ES6 템플릿 대입문

// object
const obj: object = {};

// array
let list1: any[] = [1, 'two', true];
let list2: number[] = [1, 2, 3];
let list3: Array<number> = [1, 2, 3]; // 제네릭 배열 타입

// tuple : 고정된 요소수 만큼의 타입을 미리 선언후 배열을 표현
let tuple: [string, number];
tuple = ['hello', 10]; // OK
tuple = [10, 'hello']; // Error
tuple = ['hello', 10, 'world', 100]; // Error
tuple.push(true); // Error

// enum : 열거형은 숫자값 집합에 이름을 지정한 것이다.
enum Color1 {Red, Green, Blue};
let c1: Color1 = Color1.Green;

console.log(c1); // 1

enum Color2 {Red = 1, Green, Blue};
let c2: Color2 = Color2.Green;

console.log(c2); // 2

enum Color3 {Red = 1, Green = 2, Blue = 4};
let c3: Color3 = Color3.Blue;

console.log(c3); // 4

/*
any: 타입 추론(type inference)할 수 없거나 타입 체크가 필요 없는 변수에 사용한다.
var 키워드로 선언한 변수와 같이 어떤 타입의 값이라도 할당할 수 있다.
*/
let notSure: any = 4;
notSure = 'maybe a string instead';
notSure = false; // okay, definitely a boolean

// void : 일반적으로 함수에서 반환값이 없을 경우 사용한다.
function warnUser(): void {
  console.log("This is my warning message");
}

// never : 결코 발생하지 않는 값 , 예외나 무한루프
function infiniteLoop(): never {
  while (true) {}
}

function error(message: string): never {
  throw new Error(message);
}

// Date 타입
const today: Date = new Date();

// HTMLElement 타입
const elem: HTMLElement = document.getElementById('myId');

class Person { }
// Person 타입
const person: Person = new Person();

 


이넘은 C, Java와 같은 다른 언어에서 흔하게 쓰이는 타입으로 특정 값(상수)들의 집합을 의미합니다.

이넘은 인덱스 번호로도 접근할 수 있습니다.  만약 원한다면 이넘의 인덱스를 사용자 편의로 변경하여 사용할 수도 있습니다.

뒤에 오는 데이터 type 을 잘 지정해야됨. 

enum Avengers {
    Capt,
    IronMan,
    Thor
  }
 
  let hero: string = Avengers[0];
  let hero2: Avengers = Avengers.Capt
  console.log(hero) // Capt
  console.log(hero2) // 0

 

TypeScript의 가장 독특한 특징은 정적 타이핑을 지원한다는 것이다. 정적 타입 언어는 타입을 명시적으로 선언하며, 타입이 결정된 후에는 타입을 변경할 수 없다. 정적 타이핑의 장점은 코드 가독성, 예측성, 안정성의 향상이라고 볼 수 있는데 이는 대규모 프로젝트에 매우 적합하다. -> 컴파일 단계에서 오류를 검출

 

 

3. 타입 추론

타입 선언을 생략하면 값이 할당되는 과정에서 동적으로 타입이 결정된다. 이를 타입 추론(Type Inference)이라 한다.

let foo = 123; // foo는 number 타입
foo = 'hi';    // error: Type '"hi"' is not assignable to type 'number'.

 

타입 선언을 생략하고 값도 할당하지 않아서 타입을 추론할 수 없으면 any 타입이 된다.

let foo; // let foo: any와 동치

foo = 'Hello';
console.log(typeof foo); // string

foo = true;
console.log(typeof foo); // boolean

 


4. 타입 캐스팅

기존의 타입에서 다른 타입으로 타입 캐스팅하려면 as 키워드를 사용하거나 <> 연산자를 사용할 수 있다.

 

let someValue: any = "This is a string";
let strLength: number = (someValue as string).length;
console.log(strLength); // 출력: 16

 

any 타입은 타입 검사를 우회하며, 어떤 값이든 할당할 수 있습니다. 따라서 명시를 통해 타입 안전성을 높입니다. ?

 

 

 

타입 단언? 이라고도 하는거 같은데.. 

interface Hero {
    name: string;
    age: number;
  }

//   const capt: Hero = {}; // X. 오류 발생
  const capt = {} as Hero; // 오류 없음
  capt.name = '캡틴';
  capt.age = 100;

 

'TypeScript' 카테고리의 다른 글

06. 제네릭  (0) 2024.08.27
05. 인터페이스  (0) 2024.08.27
04. 클래스  (0) 2024.08.26
02. 환경 구축  (0) 2024.08.26
01. 타입스크립트 왜?  (0) 2024.08.26