TypeScript
๋ง์ดํฌ๋ก์ํํธ์์ ๊ตฌํํ JavaScript์ ์ํผ์ (Superset) ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค. ํ์ฅ์๋ก๋ .ts๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ปดํ์ผ์ ๊ฒฐ๊ณผ๋ฌผ๋ก JavaScript ์ฝ๋๋ฅผ ์ถ๋ ฅํ๋ค. ์ต์ข ์ ์ผ๋ก ๋ฐํ์์์๋ ์ด๋ ๊ฒ ์ถ๋ ฅ๋ JavaScript ์ฝ๋๋ฅผ ๊ตฌ๋์ํค๊ฒ ๋๋ค.
ํ์ ์คํฌ๋ฆฝํธ์ ํน์ง
์ปดํ์ผ ์ธ์ด, ์ ์ ํ์
์ธ์ด
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์ ํ์
์ ์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ก ๋ฐํ์์์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ ์ ์๋ค. ์ด์ ๋ฐํด ํ์
์คํฌ๋ฆฝํธ๋ ์ ์ ํ์
์ ์ปดํ์ผ ์ธ์ด์ด๋ฉฐ ํ์
์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ ๋๋ ๋ฐ๋ฒจ(Babel)์ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ณํ๋๋ค. ์ฝ๋ ์์ฑ ๋จ๊ณ์์ ํ์
์ ์ฒดํฌํด ์ค๋ฅ๋ฅผ ํ์ธํ ์ ์๊ณ ๋ฏธ๋ฆฌ ํ์
์ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ ์คํ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค. ํ์ง๋ง ์ฝ๋ ์์ฑ ์ ๋งค๋ฒ ํ์
์ ๊ฒฐ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฒ๊ฑฐ๋กญ๊ณ ์ฝ๋๋์ด ์ฆ๊ฐํ๋ฉฐ ์ปดํ์ผ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ๋จ์ ์ด ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ํผ์
(Superset)
ํ์
์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ํผ์
, ์ฆ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ํ์
์คํฌ๋ฆฝํธ์ ๋ฌธ๋ฒ์ ์ถ๊ฐํ ์ธ์ด์ด๋ค. ๋ฐ๋ผ์ ์ ํจํ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ฑํ ์ฝ๋๋ ํ์ฅ์๋ฅผ .js์์ .ts๋ก ๋ณ๊ฒฝํ๊ณ ํ์
์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผํด ๋ณํํ ์ ์๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ง์
ํ์
์คํฌ๋ฆฝํธ๋ ES6(ECMAScript 6)์์ ์๋กญ๊ฒ ์ฌ์ฉ๋ ๋ฌธ๋ฒ์ ํฌํจํ๊ณ ์์ผ๋ฉฐ ํด๋์ค, ์ธํฐํ์ด์ค, ์์, ๋ชจ๋ ๋ฑ๊ณผ ๊ฐ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ํจํด์ ์ ๊ณตํ๋ค.
Typescript์ JavaScript ์ฐจ์ด์
Typescript๋ ์ ์ ์ ํ์ผ๋ก ๊ฐ๋ฐ ์ค์ ํ์ธํ๋๋ฐ, JavaScript๋ ๋ฐํ์ ์งํ ์ค์ ํ์ธ์ด ๋๋ค.
// JavaScript
function add(n1, n2) {
if (typeof n1 !== 'number' || typeof n2 !== 'number') {
throw new Error('Incorrect input!');
}
return n1 + n2;
}
const result = add(39, 28);
// TypeScript
function add(n1: number, n2: number) {
return n1 + n2;
}
const result = add(39, 28);
Typescript ๋ฌธ์๋ฅผ ํ์ธํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ด ์๋ค.
ํ๋ก๊ทธ๋จ์ด ์ ์ฉํ๋ ค๋ฉด, ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐ์ดํฐ ๋จ์๋ก ์์ ํ ์ ์์ด์ผ ํ๋ค.
Typescript์์, ์ฐ๋ฆฌ๋ JavaScript์์ ๊ธฐ๋ํ๋ ๊ฒ๊ณผ ๋์ผํ ํ์ ์ ์ง์ํ๋ฉฐ, ๋๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ์ด๊ฑฐ ํ์ ์ด ์ ๊ณต๋๋ค.
- TypeScript์์ ํ๋ก๊ทธ๋จ ์์ฑ์ ์ํด ๊ธฐ๋ณธ ์ ๊ณตํ๋ ๋ฐ์ดํฐ ํ์
- ์ฌ์ฉ์๊ฐ ๋ง๋ ํ์ ์ ์ด ๊ธฐ๋ณธ ์๋ฃํ๋ค๋ก ์ชผ๊ฐ์ง๋ค.
- JavaScript ๊ธฐ๋ณธ ์๋ฃํ ํฌํจ (superset)
- ECMAScript ํ์ค์ ๋ฐ๋ฅธ ๊ธฐ๋ณธ ์๋ฃํ 6๊ฐ์ง
- Boolean
- Number
- String
- Null
- Undefined
- Sysbol (ECMAScript 6์ ์ถ๊ฐ)
- Array: Object ํ
- ํ๋ก๊ทธ๋๋ฐ์ ๋์ธ ์ถ๊ฐ ์ ๊ณต๋๋ ๋ช ๊ฐ์ง ํ์
- Any, Void, Never, Unknown
- Enum
- Tuple: Object ํ
- ECMAScript ํ์ค์ ๋ฐ๋ฅธ ๊ธฐ๋ณธ ์๋ฃํ 6๊ฐ์ง
๋ฐ์ดํฐ ํ์ Primitive Types
์ค๋ธ์ ํธ์ ๋ ํผ๋ฐ์ค ํํ๊ฐ ์๋ ์ค์ ๊ฐ์ ์ ์ฅํ๋ ์๋ฃํ์ด๋ค.
ํ๋ฆฌ๋ฏธํฐ๋ธ ํ์ ๋ด์ฅ ํจ์๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฒ๋ฆฌ ๋ฐฉ์ ๋๋ถ์ด๋ค.
- (ES2015 ๊ธฐ์ค) 6๊ฐ์ง
- boolean
- number
- string
- symbol (ES2015)
- null
- undefined
let name = 'Imae';
name.toString();
literal ๊ฐ์ผ๋ก Primitive ํ์ ์ ์๋ธ ํ์ ์ ๋ํ๋ผ ์ ์๋ค.
true;
'hello';
3.14;
null;
undefined;
๋๋ ๋ํผ ๊ฐ์ฒด๋ก ๋ง๋ค ์ ์๋ค.
new Boolean(false); // typeof new Boolean(false) : 'object'
new String('world'); // typeof new String('world') : 'object'
new Number(42); // typeof new Number(42) : 'object'
TypeScript ํ์ผ JavaScript๋ก ๋ณํ
ํฐ๋ฏธ๋์ ์๋์ ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ฉด jsํ์ผ์ด ์๊ฒจ ์ปดํ์ผํ ์ ์๋ค.
node (๋ง๋ค๊ณ ์ํ๋ ํ์ผ ์ด๋ฆ).js๋ก ํ์ผ์ ์์ฑํ๋ฉด ๋๋ค.
โ basic-types npx tsc
โ basic-types node string.js
Boolean / boolean
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ํ์ ์ผ๋ก, ๋จ์ํ true ๋๋ false์ ๊ฐ์ ๊ฐ์ง๋ค.
let isDone: boolean = false;
isDone = true;
console.log(typeof isDone); // 'boolean'
let isOk: Boolean = true;
let isNotOk: boolean = new Boolean(true); // ์ค๋ฅ!
// 'Boolean' ํ์์ 'boolean' ํ์์ ํ ๋นํ ์ ์์ต๋๋ค.
// boolean'์(๋) ๊ธฐ๋ณธ ๊ฐ์ฒด์ด์ง๋ง 'Boolean'์(๋) ๋ํผ ๊ฐ์ฒด์
๋๋ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ 'boolean'์(๋ฅผ) ์ฌ์ฉํ์ธ์.ts(2322)
'Boolean' ํ์์ 'boolean' ํ์์ ํ ๋นํ ์ ์๋ค.
'boolean'์ ๊ธฐ๋ณธ ๊ฐ์ฒด์ด์ง๋ง, 'Boolean'์ ๋ํผ ๊ฐ์ฒด์ด๋ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ 'boolean'์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ts(2322)
Number
JavaScript์ ๊ฐ์ด, TypeScript์ ๋ชจ๋ ์ซ์๋ ๋ถ๋ ์์์ ๊ฐ์ด๋ค.
Typescript๋ 16์ง์, 10์ง์ ๋ฆฌํฐ๋ด ์ธ์๋ ECMAScript 2015์ ๋์ ๋ 2์ง์ ๋ฐ 8์ง์๋ฅผ ์ง์ํ๋ค.
NaN๋ Number ํ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
1_000_000๊ณผ ๊ฐ์ ํ๊ธฐ๋ ๊ฐ๋ฅํ๋ค. 1,000,000๊ณผ ๊ฐ์ ์๋ฏธ๋ก _๊ฐ ,์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค.
let decimal: number = 6; // 10์ง์ ๋ฆฌํฐ๋ด
let hex: number = 0xf00d; // 16์ง์ ๋ฆฌํฐ๋ด
let binary: number = 0b1010; // 2์ง์ ๋ฆฌํฐ๋ด
let octal: number = 0o744; // 8์ง์ ๋ฆฌํฐ๋ด
let notANumber: number = NaN;
let underscoreNum: number = 1_000_000; // ๋ฐฑ ๋ง์ ๋ณด๊ธฐ ์ฝ๊ฒ ํ๊ธฐ
String
string
๋ค๋ฅธ ์ธ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ ์คํธ ํ์์ ์ฐธ์กฐํ๊ธฐ ์ํด 'String' ํ์์ ์ฌ์ฉํ๋ค.
JavaScript์ ๋ง์ฐฌ๊ฐ์ง๋ก TypeScript๋ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ๋๋ฌ์ธ๊ธฐ ์ํด ํฐ ๋ฐ์ดํ (")๋, ์์ ๋ฐ์ดํ(')๋ฅผ ์ฌ์ฉํ๋ค.
let myName: string = 'Imae';
myName = 'Anna';
Template String
ํ์ ๊ฑธ์ณ ์๊ฑฐ๋, ํํ์์ ๋ฃ์ ์ ์๋ ๋ฌธ์์ด์ด๋ค. ์ด ๋ฌธ์์ด์ backtick(=backquote) ๊ธฐํธ์ ๋๋ฌ์์ฌ ์๋ค.
ํฌํจ๋ ํํ์์ `${expr}`์ ๊ฐ์ ํํ๋ก ์ฌ์ฉํ๋ค.
let fullName: string = `Imae Kwak`;
let age: number = 21;
let sentence: string = `Hello, My name is ${fullName}.
I'll be ${age + 1} years old next month.`;
console.log(sentence);
// Hello, My name is Imae Kwak.
//
// I'll be 22 years old next month.
Symbol
ECMAScript 2015์ Symbol์ด๋ค. new Symbol๋ก ์ฌ์ฉํ ์ ์๋ค.
Symbol ํจ์๋ฅผ ์ฌ์ฉํ์ฌ symbol ํ์ ์ ๋ง๋ค์ด๋ผ ์ ์๋ค.
console.log(Symbol('foo') === Symbol("foo")); // false
// "target": "es2016",
// "module": "commonjs" ,
// "lib": [
// "ES2015",
// "DOM"
// ],
// tsconfig ํ์ผ ๋ฐ๊พธ์ด์ฃผ์ด์ผ ํจ.
ํ๋ฆฌ๋ฏธํฐ๋ธ ํ์ ์ ๊ฐ์ ๋ด์์ ์ฌ์ฉํ๋ค.
๊ณ ์ ํ๊ณ ์์ ๋ถ๊ฐ๋ฅํ ๊ฐ์ผ๋ก ๋ง๋ค์ด์ค๋ค.
๊ทธ๋์ ์ฃผ๋ก ์ ๊ทผ์ ์ ์ดํ๋๋ฐ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค.
let sym = Symbol();
let obj = {
[sym]: "value"
};
console.log(obj[sym]); // "value"
Null & Undefined
TypeScript์์, Undefined์ Null์ ์ค์ ๋ก ๊ฐ๊ฐ undefined ๋ฐ null ์ด๋ผ๋ ํ์ ์ ๊ฐ์ง๋ค. void์ ๋ง์ฐฌ๊ฐ์ง๋ก, ๊ทธ ์์ฒด๋ก๋ ๋ฑํ ์ ์ฉํ์ง๋ ์๋ค. ๋๋ค ์๋ฌธ์๋ง ์กด์ฌํ๋ค.
// let MyName: number = undefined; // ์ค๋ฅ
// let u: undefined = null; // ์ค๋ฅ
let v: void = undefined;
let union: string | null = null; // ํฉ์งํฉ๊ฐ์ ์๋ฏธ
union = "Imae";
undefined & null์ ๋ค๋ฅธ ๋ชจ๋ ํ์์ ํ์ ํ์์ด๋ค.
์ค์ ํ์ง ์์ผ๋ฉด ๊ทธ๋ ๋ค.
number์ null ๋๋ undefined๋ฅผ ํ ๋นํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค.
ํ์ง๋ง, ์ปดํ์ผ ์ต์ ์์ `--strictNullChecks`๋ฅผ ์ฌ์ฉํ๋ฉด, null๊ณผ undefined๋ void๋ ์๊ธฐ ์์ ๋ค์๊ฒ๋ง ํ ๋นํ ์ ์๋ค.
์ด ๊ฒฝ์ฐ, null๊ณผ undefined๋ฅผ ํ ๋นํ ์ ์๊ฒํ๋ ค๋ฉด union type์ ์ด์ฉํด์ผ ํ๋ค.
null in JavaScript
null ์ด๋ผ๋ ๊ฐ์ผ๋ก ํ ๋น๋ ๊ฒ์ null์ด๋ผ๊ณ ํ๋ค.
๋ฌด์ธ๊ฐ ์๋๋ฐ, ์ฌ์ฉํ ์ค๋น๊ฐ ๋ ๋ ์ํ์ด๋ค.
null์ด๋ผ๋ ํ์ ์ null์ด๋ผ๋ ๊ฐ๋ง ๊ฐ์ง ์ ์๋ค.
๋ฐํ์์์ typeof ์ฐ์ฐ์๋ฅผ ์ด์ฉํด์ ์์๋ด๋ฉด, object์ด๋ค.
let n: null = null;
console.log(n); // null
console.log(typeof n); // object
undefined in JavaScript
๊ฐ์ ํ ๋นํ์ง ์์ ๋ณ์๋ undefined๋ผ๋ ๊ฐ์ ๊ฐ์ง๋ค. ๋ฌด์ธ๊ฐ๊ฐ ์์ ์ค๋น๊ฐ ์๋ ์ํ์ด๋ค.
object์ property๊ฐ ์์ ๋๋ undefined์ด๋ค.
๋ฐํ์์์ typeof ์ฐ์ฐ์๋ฅผ ์ด์ฉํด์ ์์๋ด๋ฉด, undefined์ด๋ค.
let u: undefined = undefined;
console.log(u); // undefined
console.log(typeof u); // undefined
Object
const person1 = {name: 'Imae', age: 29};
const person2 = Object.create({name: 'Imae', age: 29});
// ๋ด์ฅ ๊ฐ์ฒด
object
"primitive type์ด ์๋ ๊ฒ"์ ๋ํ๋ด๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ ํ์
non-primitive type
not number, string, boolean, bigint, symbol, null or undefined
Array
์๋ฐ์คํฌ๋ฆฝํธ์์ array๋ ๊ฐ์ฒด์ด๋ค.
์ฌ์ฉ๋ฐฉ๋ฒ์ ๋๊ฐ์ง๊ฐ ์๋ค.
- Array<ํ์ >
- ํ์ []
let list: (number | string)[] = [1, 2, 3, "4"]; // ์์ฃผ ์ฌ์ฉ
// union ํ์
์ผ๋ก ํฉ์งํฉ์ ๋ํ๋ ์ซ์๊ฑฐ๋ ๋ฌธ์์ด
[10, "Imae"];
let list: Array<number> = [1, 2, 3]; // ์ฌ์ฉ์ ์์
'๐ค Language > ๐ฆ TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TS. Alias (๋ณ์นญ) (2) | 2022.06.20 |
---|---|
์๋ฐ์คํฌ๋ฆฝํธ ๋์ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ํํ๋ ์ด์ (1) | 2022.06.20 |
TS. ์ธํฐํ์ด์ค interface (0) | 2022.03.22 |
TS. ํ์ ์์คํ Type System (0) | 2022.03.16 |
TS. Tuple / any / unknown / never / void (0) | 2022.03.14 |