~52일차~
npm이 설치된 환경을 기반으로 터미널에서 설치를 진행한다.
npm install -g typescript
① root 폴더에 build폴더, src폴더, tsconfig.json
를 만들기
② src 안에 main.ts
를 넣고, build 폴더 안에 index.html
과, js 폴더 생성
{
"compilerOptions": {
"rootDir": "./src", // 소스 파일 안에서 root 폴더를 명시
"outDir": "./build/js", // ts 컴파일 후 어느 경로로 들어가는지 명시
"target" : "ES2015",//ts를 ES2015버전의 JS로 변환
//위와 같이 버전 설정을 하지 않았을때 default ES3로 되어 let이 var로 되어있음
"noEmitOnError": true, //파일에 에러가 있으면 컴파일 X
"module": "ESNext", //모듈 시스템을 사용할지
"moduleResolution": "Node",
"esModuleInterop": true,
"lib" : ["ESNext", "DOM"],
"strict": true
},
"include": [// 소스 파일의 어디에서 ts 파일을 찾을 수 있는지 명시
"./src/**/*.ts",
//glob src 폴더안에 모든 하위경로 **, 모든 ts 파일
],
"exclude": [ //컴파일 시 제외
"node_modules",
]
}
"strictNullChecks": false
"strict"
는 지운 다음 위와 같이 설정하면, 다음과 같은 할당이 가능해진다.
이 외에도 많지만 추후 추가 예정.
-TS는 브라우저나 Node.js 환경에서 직접 동작할 수는 없기 때문에 컴파일해서 JS로 변환 후 사용하는 것
① 수동적으로 실행 : 저장 후 직접 명령해서 컴파일 실행
tsc main.ts
② Watch Mode : 일일이 명령 실행하지 않아도 지켜보다가 자동으로 컴파일 실행
tsc main -w
-> 컴파일 후에는 tsconfig.json
에서 지정한 루트"outDir": "./build/js"
에 js 파일이 자동 생성&업데이트 된다.
만약
rootDir
이외의 루트에 ts를 만들어 컴파일하면?-> outDir가 아닌 ts파일 바로 옆에 js파일이 생성된다.
기본 JS를 포함해서 추가적인 Type을 가진다.
기본적인 types (boolean, number, string)
let boolean: boolean;
let falseBoolean: boolean = false;
let number: number;
let integer: number = 6;
let float: number = 1.2345;
let string: string;
let firstName: string = 'Doe';
let lastName: string = "john";
let any: any = 'abc';
any = 1;
any = [];
enum Week {
Sun, // = 0
Mon, // = 1
Tue, // = 2
Wed, // = 3
Thu, // = 4
Fri, // = 5
Sat // = 6
}
console.log(Week.Mon); //1
console.log(Week.Tue); //2
let tuple1: [string, number];
tuple1 = ['a', 1];
tuple1 = ['a', 1, 2]; // 길이 Error
tuple1 = [1, 'a']; // 자리 Error
// 튜플 타입의 배열 (2차원 배열)
let users:[number, string][];
users = [[1, 'John'], [2, 'Doe']];
//push() 등을 통해 값을 넣는 것은 가능
let tuple2: [string, number];
tuple2 = ['a', 1];
tuple2.push(2);
console.log(tuple2); // ['a', 1, 2];
tuple2.push(true); // Error
let Union: (string | number) ;
union = 'hi';
union = 123;
union: []; //error
function greeting(): void {
console.log('hi');
;}
const hi: void = greeting();
console.log(hi); // undefined;
// 1. Error를 Throw할 때
function throwError(errorMsg: string): never {
throw new Error(errorMsg);
}
//2. 무한 루프
function keepProcessing(): never {
while(true) {
console.log('~~');
}
}
//한가지 타입만 가지는 배열
let names1: string[] = ['John', 'Kim'];
let names2: Array<string> = ['John', 'Kim'];
// 여러 타입을 가지는 배열(union)
let array1: (string | number)[] = ['John', 1, 2];
let array2: Array<string | number> = ['John', 1, 2];
//읽기 전용 배열 생성 readonly
let stringArray: readonly string[] = ['A', 'B']
let numberArray: ReadonlyArray<number> = [1, 2];
stringArray.push('C');
numberArray.push(3);
//typeof 연산자 object로 반환하는 모든 타입
let obj: object = {};
let arr: object = [];
// let nul: object = null; // js에서는 object로 되어 있지만 실제는 아니기때문에 ts에서는 반영됨
let date: object = new Date();
// 객체 속성에 대한 타입을 개별적으로 지정
let obj1: {id: number, title:string } = {
id: 1,
title: 'title1',
desc: 'desc 2' // 위에 desc: string값을 추가 해야함
}
let func1: ( arg1: number, arg2: number) => number;
func1 = function (x, y) {
return x * y;
}
let func2: () => void; // return 값 없을 때 void
func2 = function () {
console.log('hi')
}
let unknown: unknown = 123;
let string1: string = unknown // Error 어떤 타입 변수에 할당 불가
let string2: string = unknown as string; // 강제 할당
//"strictNullChecks": false일 때 아래같이 할당 가능
let number1: number = undefined;
let string4: string = null;
let object: {a:1, b: false} = undefined;
let array: any[] = null;
let undefined1: undefined = null;
let nell1: null = undefined;
let void1: void = null;
//예외
//"strictNullChecks": true 일때도 void에 undefined 할당 가능
let void2: void = undefined;
const rate: number = 5
// number 타입 지정
const rate = 5
// **변수 선언과 동시에 초기화할 경우 **
// 타입을 알아서 추론한다.
타입을 추론하지 못해서 Type Annotation을 꼭 해줘야하는 case
- any 타입을 리턴
- 변수 선언을 먼저하고 나중에 초기화 하는 경우
- 변수에 대입될 값이 일정치 못하는 경우