타입스크립트 확장자는 .ts
타입스크립트 설치는 npm i typescript , npm i ts-node
typescript는 TypeScript 코드를 JavaScript로 컴파일(트랜스파일)합니다.
ts-node 는 TypeScript 파일을 컴파일하지 않고, 런타임에서 즉시 실행할 수 있도록 지원합니다.
tsc 파일명 은 TypeScript 컴파일러(tsc)를 사용하여 TypeScript 파일(app.ts)을 JavaScript 파일로 변환(컴파일)하는 명령입니다.
tsc --init으로 tsconfig.json을 생성 하고 tsc -w 파일명 을 입력하면 tsconfig.json에 정의된 모든 파일을 자동으로 컴파일 한다.
let myName = 'lee';myName 을 실수로 이렇게 let myName = 1; 변경할 수 도 있다.let age = 30;
age변수의 타입을 자동으로 number형 으로 추론한다
number : 숫자 타입 , 정수와 실수 를 포함string : 문자열 타입boolean : 참, 거짓을 나타내는 불리언 타입null : 값이 없음을 나타내는 타입undefined : 값이 할당되지 않는 변수의 기본값인 타입object : 객체를 나타내는 타입array : 동일한 타입의 요소를 가진 배열 을 나타내는 타입tuple : 각 요소가 다른 타입을 가질 수 있는 배열을 나타내는 타입any : 어떠한 타입이든 할당될 수 있는 타입unknown : 타입을 미리 알 수 없는 경우 사용되는 타입let x : string = "문자열 선언";
let mname : string = 'lee';
myname = 1;
// myname 변수에 string 타입을 지정하여 myname에 숫자 타입을 할당하면 에러발생
// 변수의 데이터 타입 명시
let stdId: number = 1111;
let stdName: string = '987';
let age: number = 20;
let gender: string = 'male';
let course: string = 'Typescript';
let complete: boolean = false;
interface Person {
id: number;
name: string;
age: number;
gender: string;
}
// 함수의 데이터 타입 명시 (매개변수, 리턴 타입)
function getInfo(id: number): Person {
return {
id: id,
name: 'seungsoo',
age: 20,
gender: 'male',
};
}
const student = getInfo(123);
console.log(student);
function setInfo(x: Person): Person {
x.name = 'kim';
x.age = 20;
x.gender = 'male';
return x;
}
const student2 = setInfo(student);
console.log(student2);
{ id: 123, name: 'seungsoo', age: 20, gender: 'male' }
{ id: 123, name: 'kim', age: 20, gender: 'male' }
Person 인터페이스 정의:Person은 id, name, age, gender라는 속성을 갖는 객체의 구조를 정의합니다.getInfo 함수의 리턴 타입으로 Person을 지정했기 때문에, getInfo 함수가 반환하는 객체는 반드시 Person 인터페이스를 준수해야 합니다.getInfo 함수 구현:Person으로 명시했으므로, TypeScript는 이 함수가 반환하는 객체가 Person 인터페이스의 모든 속성을 포함하고, 타입이 일치하는지 확인합니다.id, name, age, gender 중 하나라도 빠져있거나 타입이 다르면 컴파일 에러가 발생합니다.getInfo 함수 호출:getInfo(123) 호출 시:Person으로 추론됩니다.id가 123인 Person 타입의 객체가 반환됩니다.getInfo 함수는 Person 인터페이스를 참조하여 반환 객체의 구조와 타입을 확인합니다.Person 인터페이스를 준수하지 않으면 컴파일러가 에러를 발생시킵니다.getInfo 함수는 반환 값이 Person 타입임을 보장합니다.Person 타입을 준수하는지 TypeScript가 정적으로 검사합니다.id, name, age, gender가 있는지.Person 인터페이스에 정의된 타입과 일치하는지.function getInfo(id: number): Person {
return {
id: id,
name: 'seungsoo',
age: 20,
gender: 'male',
}; // `Person` 타입 준수
}
function getInfo(id: number): Person {
return {
id: id,
name: 'seungsoo',
age: 20,
// gender 속성이 빠져 있음
}; // 오류: 'gender' 속성이 없으므로 'Person' 타입을 준수하지 않음
}
function getInfo(id: number): Person {
return {
id: id,
name: 'seungsoo',
age: '20', // 오류: age가 string 타입임
gender: 'male',
}; // 오류: 'age'의 타입이 'number'여야 함
}
getInfo 함수에서 리턴 타입으로 Person을 명시한 것은:
Person 인터페이스를 따라야 한다는 약속입니다.Person 구조를 준수하는지 검사합니다.Person 인터페이스를 참조하여 생성됩니다.따라서 작성한 코드처럼 TypeScript의 타입 시스템을 활용하면, 타입 안전성을 보장하면서 더 견고한 코드를 작성할 수 있습니다.
interface WorkOut {
id: number;
name: string;
region: string;
requipment: string;
}
function setWorkOut(workout: WorkOut): WorkOut {
console.log(`Workout: ${workout.name}`);
console.log(`Region: ${workout.region}`);
console.log(`Equipment: ${workout.requipment}`);
return workout;
}
const legDays = setWorkOut({ id: 1, name: 'squat', region: 'legs', requipment: 'freeWorks' });
console.log(legDays);