본문 바로가기
JavaScript/TypeScript

TypeScript - 브라우저 호환성

by GangDev 2024. 12. 18.

브라우저 호환성

브라우저 호환성은 웹 개발에서 매우 중요한 요소이며, 타입스크립트는 이를 효과적으로 해결합니다. 타입스크립트의 브라우저 호환성에 대해 자세히 살펴보겠습니다.

JavaScript로 컴파일되는 과정

타입스크립트는 JavaScript로 컴파일되며, 이 과정을 통해 브라우저 호환성을 달성합니다:

  • 타입스크립트 컴파일러(tsc)는 .ts 파일을 .js 파일로 변환합니다.
  • 컴파일 과정에서 타입 정보는 제거되며, 순수한 JavaScript 코드만 남습니다.
  • 최신 ECMAScript 기능을 사용하더라도 오래된 브라우저에서도 실행될 수 있도록 트랜스파일링됩니다.

예를 들어, 다음과 같은 타입스크립트 코드:

function greet(name: string): void {
  console.log(`Hello, ${name}!`);
}

컴파일 후 다음과 같은 JavaScript로 변환됩니다:

function greet(name) {
  console.log(`Hello, ${name}!`);
}

타입 정보는 제거되었지만, 함수의 기능은 그대로 유지됩니다.

다양한 브라우저 지원 가능성

타입스크립트는 다양한 브라우저를 지원할 수 있는 코드를 생성합니다:

  • ECMAScript 표준을 준수하여 작성된 코드는 대부분의 현대 브라우저에서 실행됩니다.
  • 오래된 브라우저를 위해 ES5 호환 코드로 컴파일할 수 있습니다.
  • Babel과 같은 추가 도구를 사용하면 더 넓은 범위의 브라우저 지원이 가능합니다.

예를 들어, async/await 구문을 사용한 타입스크립트 코드:

async function fetchData(url: string): Promise<any> {
  const response = await fetch(url);
  return response.json();
}

ES5로 컴파일되면 다음과 같이 변환됩니다:

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  // ... (Babel의 런타임 헬퍼 코드 생략)
};

function fetchData(url) {
  return __awaiter(this, arguments, Promise, function* () {
    const response = yield fetch(url);
    return response.json();
  });
}

이렇게 변환된 코드는 더 오래된 브라우저에서도 실행될 수 있습니다.

폴리필 사용과 트랜스파일링의 관계

폴리필(polyfill)과 트랜스파일링은 서로 보완적인 개념입니다:

  • 트랜스파일링은 최신 JavaScript 기능을 오래된 브라우저에서도 사용할 수 있도록 변환합니다.
  • 폴리필은 특정 API나 기능이 지원되지 않는 환경에서 그 기능을 구현합니다.
  • 타입스크립트 컴파일러는 기본적으로 트랜스파일링만 수행하며, 필요한 경우 별도의 도구를 통해 폴리필을 추가할 수 있습니다.

예를 들어, Promise API를 사용한 타입스크립트 코드:

function asyncOperation(): Promise<string> {
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve("Done"), 2000);
  });
}

ES5로 컴파일되면 다음과 같이 변환됩니다:

function asyncOperation() {
  return new Promise(function (resolve, reject) {
    setTimeout(function () { return resolve("Done"); }, 2000);
  });
}

하지만 이 코드는 Promise가 지원되지 않는 오래된 브라우저에서는 작동하지 않습니다. 이런 경우에 core-js 같은 라이브러리를 사용하여 Promise 폴리필을 추가할 수 있습니다.

npm install core-js

그리고 TypeScript 설정 파일(tsconfig.json)에 다음 옵션을 추가합니다:

{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "es2015.promise"]
  }
}

이렇게 하면 컴파일된 Javascript 코드에 Promise 폴리필이 포함되어, 더 넓은 범위의 브라우저에서 실행될 수 있게 됩니다.

타입스크립트의 이러한 특성 덕분에 개발자는 최신 ECMAScript 기능을 활용하면서도 다양한 브라우저 환경에서 실행될 수 있는 코드를 작성할 수 있습니다. 이는 특히 대규모 웹 애플리케이션 개발이나 크로스브라우저 호환성이 중요한 프로젝트에서 큰 이점이 됩니다.