JS(인터프리터 언어)는 기계어로 변환할 필요가 없다! 왜냐하면, 브라우저에서 처리를 하기 때문이다.
tsc --init
tsc 파일.ts
tsc 디렉토리이름/*.ts
tsc index.js --declaration --emitDeclarationOnly
하나씩 명령어로 실행할 수 있지만, 귀찮으니 tsconfig.json을 활용하자
JS라이브러리를 수정하지 않고 그대로 사용할 수 있다.
-> JS를 import하여 실행ok
npm init -y
: package.json 생성
tsc --init
: tsconfig.json 생성
"allowJs": true // TypeScript 프로젝트에 JavaScript 파일 허용 여부
"checkJs": true // JavaScript 파일 타입 체크 여부
/** 주석으로 표현해둔 것(최소한의 정보를 JS에 적는 것이다.)
* @param {number} a
* @param {number} b
* @returns {number}
*/
export function add(a, b) {
// export를 넣지 않으면 import 할 수 없는 것 아시죠?
return a + b;
}
npx tsc test.js --declaration --allowJs --emitDeclarationOnly --outDir types
→ d.ts 생성 (test.js를 기반으로 생성된 Typescript)
파일.ts
를 생성하여 생성되어있는 JS코드를 import해서 실행해볼 수 있다! ex)import { add } from "./test";
console.log(add(1, 2));
// node 명령어로 실행
// npx ts-node foo.ts
프로젝트 세팅
1. package.json 생성
npm init -y
tsc --init --rootDir ./src --outDir ./dist --esModuleInterop --module commonjs --strict true --allowJS true --checkJS true
--rootDir ./src
--outDir ./dist
--esModuleInterop
package.json의 scripts 수정
"scripts": {
"start": "tsc && node ./dist/index.js",
"build": "tsc --build",
"clean": "tsc --build --clean"
},
src 디렉토리 생성
실행
npm run build
→ typescript 빌드 (dist라는 폴더에 결과물이 빌드되어 있다. 설정에 "outDir": "./dist", 이라고 되어있기 때문)
npm run start
const calculateAverage = (매개 변수의 타입): 리턴타입 => {
const sum =
student.scores.korean +
student.scores.math +
student.scores.society +
student.scores.science +
student.scores.english;
return sum / Object.keys(student.scores).length;
};
boolean
number
string
list
tuple
서로 다른 타입의 원소를 순서에 맞게
ex) const person: [string, number, boolean] = ['Spartan', 25, false];
enum
열거형 data type
Number, String타입만 할당 가능
ex)
enum UserRole {
ADMIN = "ADMIN",
EDITOR = "EDITOR",
USER = "USER",
}
enum UserLevel {
NOT_OPERATOR, // 0
OPERATOR // 1
}
불변성을 보장해준다.
불변성이란?
→ 객체 생성 후 그 상태를 변경할 수 없는 것
객체의 속성을 불변으로 만드는데 사용되는 키워드
class Person { // 클래스는 다른 강의에서 자세히 설명해드릴게요!
readonly name: string;
readonly age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
⇒ person.name이나 person.age로 재할당 하려고 하는 경우 error 발생
아무거나 넣을 수 있음
let anything: any;
NoSQL의 경우에는 어떤 값이 들어올지 모르기 때문에(가변적) 해당 타입을 사용한다.
any와 유사하지만 더 안전하다.
unknown으로 선언한 변수는 다른 타입의 변수에 할당하려면 명시적으로 타입을 확인해야 한다.
let unknownValue: unknown = '나는 문자열이지롱!';
console.log(unknownValue); // 나는 문자열이지롱!
let stringValue: string;
stringValue = unknownValue; // 에러 발생! unknownValue가 string임이 보장이 안되기 때문!
stringValue = unknownValue as string; // 단언해줌
console.log(stringValue); // 나는 문자열이지롱!
1) 타입 단언
위 코드처럼 type을 단언해주는 것
2) typeof
ex) 타입을 미리 확인한 후 unknown 타입의 변수를 string에 할당
여러 타입 중 하나를 가질 수 있는 변수를 선언할 때 사용
|
연산자(or)를 사용하면 된다.
ex) number, string 둘 다 사용하고 싶을 때
type StringOrNumber = string | number;
새로운 타입들은 기존의 타입에서 살짝 변형된 것이기에 어렵지 않았지만, 컴파일러가 어떻게 실행되는지 한번 순서를 그려보면서 내용을 정리할 필요가 있다.
정리가 깔끔해서 한 눈에 보기 좋네요~ 잘보고갑니다 !!!