본문 바로가기

첫 번째 타입스크립트 프로그램 작성

변수와 함수에 타입을 붙인 첫 TypeScript 파일을 검사·컴파일하고 생성된 JavaScript를 실행하는 흐름을 확인합니다.

이 절에서는 첫 번째 타입스크립트 프로그램을 작성하면서 타입 검사, 컴파일, 자바스크립트 실행 흐름을 확인합니다.

첫 프로그램은 네 경계를 따로 확인한다 — 상태 추적

첫 프로그램 작성·진단/방출·JS 실행에서 파일과 결과의 상태가 바뀐다. 같은 소스/출력/실행 역할로 실제 관찰 값을 비교할 수 있다.

first-program.ts에 문자열과 숫자 계약을 표현하고 검사한다. 5.x의 파일 지정 경로는 설정을 무시하지만, 6.0 이상에서 설정 파일이 있는 폴더는 TS5112로 중단된다. 프로젝트 명령은 설정을 적용한다. 생성된 JavaScript를 Node에서 실행해2025 welcome/status두 줄을 확인한다.

TYPE / RUNTIME / CONTRACT

첫 프로그램의 검사 · 출력 · 실행을 따로 확인한다

원문 명령은 tsc first-program.ts로 파일을 직접 지정합니다. TypeScript 6.0 이상에서 tsconfig가 있는 폴더라면 TS5112로 중단되므로 본문의 프로젝트 경로를 사용합니다. 프로젝트 정책을 적용하려면 tsc -p .과 noEmitOnError를 사용합니다. 어느 경로를 택하든 생성된 JavaScript의 실행 결과는 별도로 확인합니다.

첫 프로그램의 소스·검사·실행작성→검사와출력정책→실제JavaScript실행3노드2간선이다. TypeScript6설정파일이있는폴더의파일지정명령은TS5112로중단될수있으므로프로젝트경로를구분한다. 고정2025예제의두줄출력과진단을따로확인한다.
.ts 작성명시 · 추론한 타입
연결 관계.ts 작성 · 명시 · 추론한 타입 → 검사 · 출력 정책 · 프로젝트 경로 선택
검사 · 출력 정책프로젝트 경로 선택
연결 관계검사 · 출력 정책 · 프로젝트 경로 선택 → .js 실행 · 두 줄 결과 확인
.js 실행두 줄 결과 확인
첫 프로그램의 소스·검사·실행 · 모바일작성→검사와출력정책→실제JavaScript실행3노드2간선이다. TypeScript6설정파일이있는폴더의파일지정명령은TS5112로중단될수있으므로프로젝트경로를구분한다. 고정2025예제의두줄출력과진단을따로확인한다. 모바일에서도 노드와 연결 방향·독립 경로가 같다.
.ts 작성명시 · 추론한 타입
연결 관계.ts 작성 · 명시 · 추론한 타입 → 검사 · 출력 정책 · 프로젝트 경로 선택
검사 · 출력 정책프로젝트 경로 선택
연결 관계검사 · 출력 정책 · 프로젝트 경로 선택 → .js 실행 · 두 줄 결과 확인
.js 실행두 줄 결과 확인

ACTUAL SOURCE

매개변수와 반환값은 명시, 결과는 추론

createWelcomeMessage(name:string,year:number):string와 appName/currentYear/isActive를 작성합니다. greeting의 string 타입은 반환값에서 추론합니다.

ACTUAL COMMAND / FILE MODE

tsc first-program.ts는 파일 지정 경로

5.x의 파일 지정 명령은 tsconfig를 무시하며, 6.0 이상에서 설정 파일이 있으면 TS5112로 중단됩니다. 6.0 이상의 명시적 --ignoreConfig 실험도 설정을 적용하지 않습니다. 기본 정책에서는 타입 오류가 있어도 JavaScript가 출력될 수 있습니다. 문자열 invalidYear 예제는 주석을 해제할 때 진단을 보여줍니다.

PROJECT POLICY / ALTERNATIVE

tsc -p . --noEmitOnError로 설정을 적용

프로젝트의 대상과 옵션을 적용하고 오류가 있는 출력을 막습니다. 검사만 필요하면 --noEmit을 사용합니다. 새 출력 실패가 이미 남은 이전 JavaScript를 자동으로 지우는 것은 아닙니다.

ACTUAL OUTPUT

2025 안내문과 Active 상태 두 줄

node first-program.js는 Explorer와 TypeScript Journey가 포함된 welcome, Active for 2025 year 두 줄을 출력합니다. 이 고정 예제의 실행 결과와 컴파일 진단을 따로 확인합니다.

first-program.ts에 문자열과 숫자 계약을 표현하고 검사한다. 5.x의 파일 지정 경로는 설정을 무시하지만, 6.0 이상에서 설정 파일이 있는 폴더는 TS5112로 중단된다. 프로젝트 명령은 설정을 적용한다. 생성된 JavaScript를 Node에서 실행해2025 welcome/status두 줄을 확인한다.

이 예의 조건

  • 원도표의 전체 구조와 설명은 위 관계도와 표에서 유지합니다. 아래 인쇄 표에도 원도표의 관계·조건·라벨·설명·주석을 보존합니다.
  • 두 관찰 칸의 위치는 고정입니다. 관찰 상태는 해당 순간의 값이며, 동작·이유는 그 조건에서의 판정과 변화 원인입니다. 독립 비교와 실패 분기는 별도 조건으로 읽고 모든 분기를 한 요청의 필수 실행 순서로 이어 읽지 않습니다.
관계도의 보충 설명
원도표의 전체 관계·조건·설명
구분내용
원도표 캡션first-program.ts에 문자열과 숫자 계약을 표현하고 검사한다. 5.x의 파일 지정 경로는 설정을 무시하지만, 6.0 이상에서 설정 파일이 있는 폴더는 TS5112로 중단된다. 프로젝트 명령은 설정을 적용한다. 생성된 JavaScript를 Node에서 실행해 2025 welcome/status 두 줄을 확인한다.
전체 관계·조건 설명작성→검사와 출력 정책→실제 JavaScript 실행의 노드 3개·간선 2개다. TypeScript 6 설정 파일이 있는 폴더의 파일 지정 명령은 TS5112로 중단될 수 있으므로 프로젝트 경로를 구분한다. 고정 2025 예제의 두 줄 출력과 진단을 따로 확인한다.
전체 관계·조건 설명작성→검사와 출력 정책→실제 JavaScript 실행의 노드 3개·간선 2개다. TypeScript 6 설정 파일이 있는 폴더의 파일 지정 명령은 TS5112로 중단될 수 있으므로 프로젝트 경로를 구분한다. 고정 2025 예제의 두 줄 출력과 진단을 따로 확인한다. 모바일에서도 노드와 연결 방향·독립 경로가 같다.
원도표 설명createWelcomeMessage(name:string,year:number):string과 appName/currentYear/isActive를 작성합니다. greeting의 string 타입은 반환값에서 추론합니다.
원도표 설명5.x의 파일 지정 명령은 tsconfig를 무시하며, 6.0 이상에서 설정 파일이 있으면 TS5112로 중단됩니다. 6.0 이상의 명시적 --ignoreConfig 실험도 설정을 적용하지 않습니다. 기본 정책에서는 타입 오류가 있어도 JavaScript가 출력될 수 있습니다. 문자열 invalidYear 예제는 주석을 해제할 때 진단을 보여 줍니다.
전체 상태와 변화 근거
장면현재 관찰값설명변화 이유
소스 작성소스: first-program.ts / 고정 예제: Explorer · 2025첫 TypeScript 파일에 현재 프로그램을 작성한다source와 실행 산출물은 서로 다른 파일이다
검사와 방출진단: 타입 검사 결과 / 출력: 설정상 허용된 JS설정과 진단 및 emit 정책을 적용한다타입 검사 성공 여부와 emit 정책을 분리한다
실행실행 파일: first-program.js / 출력: welcome·Active 안내 2줄Node가 방출된 JavaScript를 실행해 실제 출력값을 만든다tsc 실행과 프로그램 실행은 별개이며 실제 파일 경로를 사용한다

첫 프로그램은 네 경계를 따로 확인한다 — 상태 추적

첫 프로그램 작성·진단/방출·JS 실행에서 파일과 결과의 상태가 바뀐다. 같은 소스/출력/실행 역할로 실제 관찰 값을 비교할 수 있다.

first-program.ts에 문자열과 숫자 계약을 표현하고 검사한다. 5.x의 파일 지정 경로는 설정을 무시하지만, 6.0 이상에서 설정 파일이 있는 폴더는 TS5112로 중단된다. 프로젝트 명령은 설정을 적용한다. 생성된 JavaScript를 Node에서 실행해2025 welcome/status두 줄을 확인한다.

TYPE / RUNTIME / CONTRACT

첫 프로그램의 검사 · 출력 · 실행을 따로 확인한다

원문 명령은 tsc first-program.ts로 파일을 직접 지정합니다. TypeScript 6.0 이상에서 tsconfig가 있는 폴더라면 TS5112로 중단되므로 본문의 프로젝트 경로를 사용합니다. 프로젝트 정책을 적용하려면 tsc -p .과 noEmitOnError를 사용합니다. 어느 경로를 택하든 생성된 JavaScript의 실행 결과는 별도로 확인합니다.

첫 프로그램의 소스·검사·실행작성→검사와출력정책→실제JavaScript실행3노드2간선이다. TypeScript6설정파일이있는폴더의파일지정명령은TS5112로중단될수있으므로프로젝트경로를구분한다. 고정2025예제의두줄출력과진단을따로확인한다.
.ts 작성명시 · 추론한 타입
연결 관계.ts 작성 · 명시 · 추론한 타입 → 검사 · 출력 정책 · 프로젝트 경로 선택
검사 · 출력 정책프로젝트 경로 선택
연결 관계검사 · 출력 정책 · 프로젝트 경로 선택 → .js 실행 · 두 줄 결과 확인
.js 실행두 줄 결과 확인
첫 프로그램의 소스·검사·실행 · 모바일작성→검사와출력정책→실제JavaScript실행3노드2간선이다. TypeScript6설정파일이있는폴더의파일지정명령은TS5112로중단될수있으므로프로젝트경로를구분한다. 고정2025예제의두줄출력과진단을따로확인한다. 모바일에서도 노드와 연결 방향·독립 경로가 같다.
.ts 작성명시 · 추론한 타입
연결 관계.ts 작성 · 명시 · 추론한 타입 → 검사 · 출력 정책 · 프로젝트 경로 선택
검사 · 출력 정책프로젝트 경로 선택
연결 관계검사 · 출력 정책 · 프로젝트 경로 선택 → .js 실행 · 두 줄 결과 확인
.js 실행두 줄 결과 확인

ACTUAL SOURCE

매개변수와 반환값은 명시, 결과는 추론

createWelcomeMessage(name:string,year:number):string와 appName/currentYear/isActive를 작성합니다. greeting의 string 타입은 반환값에서 추론합니다.

ACTUAL COMMAND / FILE MODE

tsc first-program.ts는 파일 지정 경로

5.x의 파일 지정 명령은 tsconfig를 무시하며, 6.0 이상에서 설정 파일이 있으면 TS5112로 중단됩니다. 6.0 이상의 명시적 --ignoreConfig 실험도 설정을 적용하지 않습니다. 기본 정책에서는 타입 오류가 있어도 JavaScript가 출력될 수 있습니다. 문자열 invalidYear 예제는 주석을 해제할 때 진단을 보여줍니다.

PROJECT POLICY / ALTERNATIVE

tsc -p . --noEmitOnError로 설정을 적용

프로젝트의 대상과 옵션을 적용하고 오류가 있는 출력을 막습니다. 검사만 필요하면 --noEmit을 사용합니다. 새 출력 실패가 이미 남은 이전 JavaScript를 자동으로 지우는 것은 아닙니다.

ACTUAL OUTPUT

2025 안내문과 Active 상태 두 줄

node first-program.js는 Explorer와 TypeScript Journey가 포함된 welcome, Active for 2025 year 두 줄을 출력합니다. 이 고정 예제의 실행 결과와 컴파일 진단을 따로 확인합니다.

first-program.ts에 문자열과 숫자 계약을 표현하고 검사한다. 5.x의 파일 지정 경로는 설정을 무시하지만, 6.0 이상에서 설정 파일이 있는 폴더는 TS5112로 중단된다. 프로젝트 명령은 설정을 적용한다. 생성된 JavaScript를 Node에서 실행해2025 welcome/status두 줄을 확인한다.

이 예의 조건

  • 원도표의 전체 구조와 설명은 위 관계도와 표에서 유지합니다. 아래 인쇄 표에도 원도표의 관계·조건·라벨·설명·주석을 보존합니다.
  • 두 관찰 칸의 위치는 고정입니다. 관찰 상태는 해당 순간의 값이며, 동작·이유는 그 조건에서의 판정과 변화 원인입니다. 독립 비교와 실패 분기는 별도 조건으로 읽고 모든 분기를 한 요청의 필수 실행 순서로 이어 읽지 않습니다.

관계도의 보충 설명

원도표의 전체 관계·조건·설명
구분내용
원도표 캡션first-program.ts에 문자열과 숫자 계약을 표현하고 검사한다. 5.x의 파일 지정 경로는 설정을 무시하지만, 6.0 이상에서 설정 파일이 있는 폴더는 TS5112로 중단된다. 프로젝트 명령은 설정을 적용한다. 생성된 JavaScript를 Node에서 실행해 2025 welcome/status 두 줄을 확인한다.
전체 관계·조건 설명작성→검사와 출력 정책→실제 JavaScript 실행의 노드 3개·간선 2개다. TypeScript 6 설정 파일이 있는 폴더의 파일 지정 명령은 TS5112로 중단될 수 있으므로 프로젝트 경로를 구분한다. 고정 2025 예제의 두 줄 출력과 진단을 따로 확인한다.
전체 관계·조건 설명작성→검사와 출력 정책→실제 JavaScript 실행의 노드 3개·간선 2개다. TypeScript 6 설정 파일이 있는 폴더의 파일 지정 명령은 TS5112로 중단될 수 있으므로 프로젝트 경로를 구분한다. 고정 2025 예제의 두 줄 출력과 진단을 따로 확인한다. 모바일에서도 노드와 연결 방향·독립 경로가 같다.
원도표 설명createWelcomeMessage(name:string,year:number):string과 appName/currentYear/isActive를 작성합니다. greeting의 string 타입은 반환값에서 추론합니다.
원도표 설명5.x의 파일 지정 명령은 tsconfig를 무시하며, 6.0 이상에서 설정 파일이 있으면 TS5112로 중단됩니다. 6.0 이상의 명시적 --ignoreConfig 실험도 설정을 적용하지 않습니다. 기본 정책에서는 타입 오류가 있어도 JavaScript가 출력될 수 있습니다. 문자열 invalidYear 예제는 주석을 해제할 때 진단을 보여 줍니다.
전체 상태와 변화 근거
장면현재 관찰값설명변화 이유
소스 작성소스: first-program.ts / 고정 예제: Explorer · 2025첫 TypeScript 파일에 현재 프로그램을 작성한다source와 실행 산출물은 서로 다른 파일이다
검사와 방출진단: 타입 검사 결과 / 출력: 설정상 허용된 JS설정과 진단 및 emit 정책을 적용한다타입 검사 성공 여부와 emit 정책을 분리한다
실행실행 파일: first-program.js / 출력: welcome·Active 안내 2줄Node가 방출된 JavaScript를 실행해 실제 출력값을 만든다tsc 실행과 프로그램 실행은 별개이며 실제 파일 경로를 사용한다

타입스크립트 파일 만들기

먼저, 여러분이 환경 설정을 위해 만들었던 my-ts-project 폴더를 VS Code로 열어주세요.

만약 새로운 프로젝트를 시작하고 싶다면, 이전 절의 지침에 따라 새 폴더를 만들고 tsc --init 명령어로 tsconfig.json 파일을 생성한 후 진행하셔도 좋습니다.

이제 이 폴더 안에 first-program.ts라는 새 파일을 생성해봅시다.

파일명은 자유롭게 정해도 되지만, 일반적으로 타입스크립트 파일은 .ts 확장자를 사용합니다.


간단한 함수와 변수에 타입 적용하기

first-program.ts 파일에 다음 코드를 작성해보세요.

한 줄씩 살펴보면서 타입스크립트가 어떻게 동작하는지 이해하는 것이 중요합니다.

first-program.ts
// 1. 변수에 타입 명시하기
let appName: string = "TypeScript Journey";
let currentYear: number = 2025;
let isActive: boolean = true;

// 2. 함수에 타입 명시하기 (매개변수와 반환 값)
function createWelcomeMessage(name: string, year: number): string {
  return `Hello, ${name}! We are embarking on the ${year} ${appName}.`;
}

// 3. 타입 추론 (Type Inference) 살펴보기
let greeting = createWelcomeMessage("Explorer", currentYear);
// VS Code에서 'greeting' 변수에 마우스를 올려보세요.
// string 타입으로 자동으로 추론되었음을 확인할 수 있습니다.

// 4. 의도적인 오류 발생시켜보기
// 아래 줄의 주석을 해제하고 어떤 오류 메시지가 뜨는지 확인해보세요.
// let invalidYear: number = "Two Thousand Twenty-Five";
// Type 'string' is not assignable to type 'number'. (string 형식을 number 형식에 할당할 수 없습니다.)

// 5. 타입스크립트 코드 실행 결과 확인
console.log(greeting);

if (isActive) {
  console.log(`Current application status: Active for ${currentYear} year.`);
}

코드를 작성하셨다면, 몇 가지 중요한 포인트를 짚어보겠습니다.

  • 변수 타입 명시 (: 연산자): let appName: string = "TypeScript Journey";처럼 변수 이름 뒤에 콜론(:)으로 타입을 명시했습니다. 이는 appName 변수가 문자열(string) 값만 가질 수 있음을 의미합니다. 숫자나 불리언 값을 할당하려 하면 VS Code가 즉시 오류를 표시해 줍니다. number, boolean 타입도 같은 방식으로 동작합니다.

  • 함수 매개변수 및 반환값 타입 명시: function createWelcomeMessage(name: string, year: number): string { ... }에서 name: string과 year: number는 함수 매개변수의 타입을 명시합니다. 함수 괄호 뒤의 : string은 이 함수가 문자열(string)을 반환해야 함을 나타냅니다.

  • 타입 추론 (Type Inference): let greeting = createWelcomeMessage("Explorer", currentYear); 줄을 보면 greeting 변수에 타입을 직접 쓰지 않았습니다. 하지만 VS Code에서 greeting 위에 마우스를 올리면, 이 변수가 string 타입으로 추론되었음을 확인할 수 있습니다. 타입스크립트는 모든 타입을 수동으로 쓰지 않아도, 할당값과 반환값을 보고 타입을 추론합니다. 덕분에 코드가 간결해지면서도 타입 안정성을 유지할 수 있습니다.

  • 컴파일 시점의 오류 검출: 주석 처리된 let invalidYear: number = "Two Thousand Twenty-Five"; 줄의 주석을 해제하면 VS Code가 즉시 빨간 줄과 오류 메시지를 보여줍니다. Type 'string' is not assignable to type 'number'. 즉, 문자열은 숫자에 할당될 수 없다는 의미입니다. 이처럼 타입스크립트는 실행 전에 잠재적 오류를 알려 런타임 문제를 미리 방지합니다.


컴파일하고 실행하기

이제 작성한 first-program.ts 파일을 자바스크립트로 변환(컴파일)하고 실행해봅시다.

터미널 열기: VS Code의 상단 메뉴에서 터미널(Terminal) -> 새 터미널(New Terminal)을 선택하여 터미널을 엽니다.

타입스크립트 컴파일: 아래 원문은 파일을 직접 지정하는 경로입니다. TypeScript 6.0 이상에서 tsconfig.json이 있는 폴더라면 이 명령은 TS5112 진단으로 중단됩니다. 이때는 절 끝의 tsc -p . 프로젝트 경로를 사용하세요. TypeScript 5.x의 파일 지정 경로는 설정 파일을 무시했으므로 두 경우를 구별해야 합니다.

tsc first-program.ts

파일 지정 경로에서 검사가 진행되고 출력이 허용된 경우 first-program.ts와 동일한 폴더에 first-program.js가 생성됩니다. TS5112로 중단된 경우에는 새 출력이 생기지 않습니다.

이 first-program.js 파일은 여러분이 작성한 타입스크립트 코드가 순수한 자바스크립트로 변환된 결과물입니다.

VS Code에서 first-program.js 파일을 열어보면 타입 정보가 모두 제거된 것을 확인할 수 있습니다.

만약 tsc 명령어만 입력하면, tsconfig.json 파일 설정에 따라 프로젝트 내의 모든 .ts 파일을 컴파일합니다.

5.x의 파일 지정 경로 또는 6.0 이상의 명시적 --ignoreConfig 경로는 tsconfig.json을 사용하지 않습니다. 기본 설정에서는 타입 오류가 있어도 JavaScript가 출력될 수 있습니다. 상단 그림의 프로젝트 정책을 적용할 때는 tsc -p . --noEmitOnError로 설정 파일의 대상과 옵션을 적용하고 오류가 있는 emit을 막습니다.

자바스크립트 파일 실행: 이제 컴파일된 자바스크립트 파일을 Node.js 런타임을 사용하여 실행합니다.

node first-program.js

터미널에 다음과 같은 메시지가 출력될 것입니다.

Hello, Explorer! We are embarking on the 2025 TypeScript Journey.
Current application status: Active for 2025 year.

첫 번째 타입스크립트 프로그램에서 작성, 타입 검사, 자바스크립트 변환, 실행 결과 확인 흐름을 점검했습니다.

위 2025는 원문 예제의 고정 입력값입니다. 현재 연도를 자동으로 읽는 프로그램이 아니므로 실행 날짜에 따라 출력이 바뀌지 않습니다.

이후 장에서는 이 기본 흐름을 바탕으로 타입스크립트의 주요 기능과 적용 기준을 더 자세히 다룹니다.

다음 장에서는 타입스크립트의 핵심 개념인 타입 시스템에 대해 더 자세히 알아보겠습니다.

기본 타입부터 복잡한 타입까지, 타입을 정의하고 활용하는 방법을 살펴봅니다.

프로젝트 경로를 선택했다면 앞 절의 별도 ts-first-isolated 설정을 사용했다면 include를 ["first-program.ts"]로 바꾸고, 현재 원문 코드를 그 파일에 저장합니다. 이 파일을 검사·출력할 때는 파일명을 CLI에 덧붙이지 않습니다.

tsc -p . --noEmit
tsc -p .
node dist/first-program.js

tsc first-program.ts는 앞의 파일 지정 예제입니다. TypeScript 6.0 이상은 설정 파일이 있는 폴더에서 이를 TS5112로 중단합니다. 설정을 무시하는 별도 실험이 목적일 때만 6.0 이상의 tsc --ignoreConfig first-program.ts를 사용하며, 이 명령에는 프로젝트의 검사·출력 옵션이 적용되지 않습니다. tsc -p . first-program.ts처럼 두 선택을 한 명령에 섞지도 않습니다. 어느 경로를 사용했는지와 새 출력 파일의 위치를 함께 확인하세요.

스스로 확인하기 검사가 성공한 상태에서 currentYear를 2026으로, isActive를 false로 바꾸세요. greeting의 추론 타입은 바뀌나요? 다시 검사·출력한 프로그램이 몇 줄을 출력하고 어떤 문장을 만드는지 예상해 보세요.

풀이 확인

greeting은 여전히 string입니다. 출력은 Hello, Explorer! We are embarking on the 2026 TypeScript Journey. 한 줄이며, if (isActive) 본문은 실행하지 않습니다. 타입 검사 통과와 특정 분기의 실행 여부는 다른 질문입니다.

마지막으로 invalidYear의 오류 주석을 해제하고 프로젝트 검사 결과를 확인하세요. noEmitOnError가 새 출력을 막아도 이전 JavaScript는 남을 수 있습니다. 오류 진단을 무시하고 남아 있는 파일의 출력만 확인하지 않습니다.

이 버전별 변경은 공식 TypeScript 6.0 릴리스 노트에 명시되어 있습니다.