๐ฆ
24์ผ์ฐจ
Part 4. TypeScript Essentials
Ch 1. TypeScript
Ch 2. Basic Types
Ch1. TypeScript
Typescript๋ ์ ํ์ ์ถ๊ฐํ์ฌ JavaScript๋ฅผ ํ์ฅํ๋ค.
Typescript๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๊ณ ์์ ์ฌํญ์ ์ ๊ณตํ๋ ์๊ฐ์ ์ ์ฝํ ์ ์๋ค.
๐ ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ๋ฅผ ๊ธ๋ก๋ฒ๋ก ์ค์น ํ,
// ํ์
์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ ๊ธ๋ก๋ฒ ์ค์น
$ npm i typescript -g
// cli ๋ช
๋ น์ด๋ก ํ์ผ ์ปดํ์ผ
$ tsc test.ts
// ํน์ ํ๋ก์ ํธ ํด๋์์ ํ์
์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ ์ค์ ์ ๋ง์ถฐ ์ปดํ์ผ
$ tsc --init
$ tsc
๐ ํ๋ก์ ํธ์ ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ๋ฅผ ์ค์น ํ,
// ํ๋ก์ ํธ์ ํ์
์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ ์ค์น
$ npm i typescript
// .bin ์์ ๋ช
๋ น์ด๋ก ํ์ผ ์ปดํ์ผ (node_modules/.bin/tsc)
$ npx tsc --init
$ npx tsc
// npm ์คํฌ๋ฆฝํธ๋ก ํ์ผ ์ปดํ์ผ
// ํ๋ก์ ํธ์ ์๋ ํ์
์คํฌ๋ฆฝํธ ์ค์ ์ ๋ง์ถฐ, npm ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผ
๐ TypeScript Annotation
let a: number;
a = 39;
a = "Mark"; // Error
function hello(b: number) {}
hello(39);
hello("Mark"); // Error
Ch2. Basic Types
- Primitive Types
- boolean
- number
- string
- symbol
- primitive ํ์ ์ ๊ฐ์ ๋ด์์ ์ฌ์ฉํ๋ค.
- ๊ณ ์ ํ๊ณ ์์ ๋ถ๊ฐ๋ฅํ ๊ฐ์ผ๋ก ๋ง๋ค์ด์ค๋ค.
- ๊ทธ๋์ ์ฃผ๋ก ์ ๊ทผ์ ์ ์ดํ๋๋ฐ ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- null & undefined
- null ์ด๋ผ๋ ํ์ ์ null ์ด๋ผ๋ ๊ฐ๋ง ๊ฐ์ง ์ ์๋ค.
- ๋ฐํ์์์ typeof ์ฐ์ฐ์๋ฅผ ์ด์ฉํด์ ์์๋ด๋ฉด null์ object, undefined๋ undefined์ด๋ค.
- object
- "primitive ํ์ ์ด ์๋ ๊ฒ"์ ๋ํ๋ด๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ ํ์
- Array
- ๋ฐฐ์ด ์์ ์์๋ค์ ๋ชจ๋ ๊ฐ์ ํ์ ์ด๋ค.
- Tuple
- ๊ธธ์ด๊ฐ ์ ํด์ ธ ์๋ค.
- ํ์ ์ด ์ ํํ๋ค.
- any
- ์ด๋ค ํ์ ์ด์ด์ด๋ ์๊ด์๋ ํ์ ์ด๋ค.
- ์ต๋ํ ์ฐ์ง ๋ง๊ธฐ~~~
- unknown
- ์ด ๋ณ์๊ฐ ๋ฌด์(ํ์ )์ด๋ ๋ ์ ์์์ ์๋ ค์ค๋ค.
- never
- never ์๋ ๊ทธ ์ด๋ค ๊ฒ๋ ํ ๋นํ ์ ์๋ค.
- ์๋ชป๋ ํ์ ์ ๋ฃ๋ ์ค์๋ฅผ ๋ง๊ณ ์ ํ ๋ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
- void
- undefined๋ฅผ return
// boolean.ts
let isDone: boolean = false;
isDone = true;
console.log(typeof isDone); // boolean
let isOk: Boolean = true;
let isNotOk: boolean = new Boolean(true); // Error !boolean ๋๋ฌธ์๋ก!
// symbol.ts
console.log(Symbol("foo") === Symbol("foo")); // false
const sym = Symbol();
const obj = {
[sym]: "value",
};
obj[sym];
// object.ts
const person1 = { name: "Mark", age: 39 };
// declare function create(o: object | null): void;
const person2 = Object.create({ name: "Mark", age: 39 });
// array.ts
let list: (number | string)[] = [1, 2, 3, "4"];
// let list: Array<number> = [1, 2, 3];
// tuple.ts
let x: [string, number];
x = ["hello", 39];
x = [10, "Mark"]; // Error
x[2] = "world"; // Error
const person: [string, number] = ["Mark", 39];
const [first, second, third] = person; // first: string, second: number, third Error
// any.ts
function returnAny(message: any): any {
console.log(message);
}
const any1 = returnAny("๋ฆฌํด์ ์๋ฌด๊ฑฐ๋");
any1.toString();
let looselyTyped: any = {};
// any๋ ๊ณ์ํด์ ๊ฐ์ฒด๋ฅผ ํตํด ์ ํ๋๋ค.
// ๊ฒฐ๊ตญ, ๋ชจ๋ ํธ์๋ ํ์
์์ ์ฑ์ ์๋ ๋๊ฐ๋ก ์จ๋ค.
const d = looselyTyped.a.b.c.d;
function leakingAny(obj: any) {
const a: number = obj.num; // ๋์ ๋ง๊ธฐ!
const b = a + 1;
return b;
}
const c = leakingAny({ num: 0 });
c.indexOf("0"); // Error
// unknown.ts
declare const maybe: unknown;
const aNumber: number = maybe; // Error
if (maybe === true) {
const aBoolean: boolean = maybe; // ํ์
๊ฐ๋๋ฅผ ํตํด์ ํ์
์ ํ์ ์ํด.
const aString: string = maybe; // Error
}
if (typeof maybe === "string") {
const aString: string = maybe;
const aBoolean: boolean = maybe; // Error
}
// never.ts
function error(message: string): never {
throw new Error(message);
}
function fail() {
return error("failed");
}
function infiniteLoop(): never {
while (true) {}
}
let a: string = "hello";
if (typeof a !== "string") {
a; // a: never
}
declare const b: string | number;
if (typeof b !== "string") {
a; // b: number
}
// void.ts
// returnVoid: void
function returnVoid(message: string): void {
console.log(message);
return undefined;
}
returnVoid("๋ฆฌํด์ด ์๋ค.");