#1 Language ๐/1-3 Typescript
[Typescript] Typescript ๊ธฐ๋ณธ & ๊ธฐ๋ณธ ํ์
FillByCoding
2023. 12. 23. 14:42

Using Type
- number
- JS๋ TS์์ number ํ์ ์ ํ๋๋ฟ
- string
- ‘Hi’, “Hi”,Hi
- boolean
- true, false
- ์๋ฐ์คํฌ๋ฆฝํธ ์ฐจ์ด
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์ ํ์
- ๋ฌธ์์ด์ ํ ๋นํ ๋ ์ฒ์์ ์ซ์ํ ๋ณ์๊ฐ ์๋๋ผ๋ ์ ํ ๋ฌธ์ ์์
- ๊ทธ๋์ ํน์ ํ์ ์ ์์กดํ๋ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ฐํ์์์ ํ์ฌ ํ์ ์ ํ์ธํ ์ ์๋
- typeof๋ฅผ ์ฌ์ฉ
- ๋ฐ๋ฉด, ํ์ ์คํฌ๋ฆฝํธ๋ ์ ์ ํ์
- ๋ณ์์ ๋งค๊ฐ๋ณ์์ ํ์ ์ ๋จผ์ ์ ์ํจ
- ๋ฐํ์ ์ค์ ๊ฐ์๊ธฐ ๋ณ๊ฒฝ๋์ง ์์
- ์ซ์ํ์ผ๋ก ์ค์ ํ ๋ณ์์ ๋ฌธ์์ด์ ํ ๋นํ๋ฉด ์๋ฌ๋ฐ์
- ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ณด๋ค ํจ์ฌ ๋ง์ ํ์ ์ ์๊ณ ์์
- ๊ฒฐ๋ก : ํ์ ์คํฌ๋ฆฝํธ ํ์ ์ ์ปดํ์ผ ์ค์ ํ์ธ๋๋ ๋ฐ๋ฉด,
- ์๋ฐ์คํฌ๋ฆฝํธ ํ์ ์ ๋ฐํ์ ์ค์ ํ์ธ ๋จ
- ์ถ๊ฐ: ํ์ ์คํฌ๋ฆฝํธ๋ ํ์ ์ ๋ช ์์ ์ผ๋ก ํ ๋นํ ์๋ (age: number)
- ํ์ ์ ์ถ๋ก ํ ์๋ ์์
object
- {age: 30}
- ๊ฐ์ฒด๋ ์์ ๊ฐ์ ์์ฑ์ ๊ฐ์ ธ์ผ ํ๊ฑฐ๋, ์์ฑ์ ํจ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํด์ผ ํจ

- ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด๋ ์ผํ ์ฌ์ฉํ์ง๋ง
- ํ์ ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด๋ ์ธ๋ฏธ์ฝ๋ก ์ฌ์ฉ

Array
- [1, 2, 3]
- ๋ฐฐ์ด์๋ ๋ฌธ์์ด๊ณผ ์ซ์ํ ํผํฉ ๊ฐ๋ฅ
- ํ์ ์คํฌ๋ฆฝํธ์์ ๋ฐฐ์ด์ ๋ฌด์์ด๋ ์ง์ ๊ฐ๋ฅ
- ์ด๋ค ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด์ด๋ ์ง์ํ๋ฉฐ ๋ฐฐ์ด์ ํ์ ์ ์ ์ฐํ๊ฒ๋, ์ ํ์ ์ผ๋ก๋ ์ง์ ๊ฐ๋ฅ

- ๋ฐฐ์ด์ ๋๊ดํธ [ ] ์์ ํ์ ์ ๋ถ์ฌ์ค
- ํผํฉ๋ ํ์ ์ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ค๋ฉด any ํค์๋ ์ฌ์ฉ

Tuple
- [1, 2]
- ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํํ์ด ์์์
- ๊ธธ์ด์ ํ์ ์ด ๊ณ ์ ๋ ๋ฐฐ์ด
- ๋๊ดํธ ์์ ํ์ ์ ์ง์
role: [number, string]
Enum
- enum{NEW, OLD}
- ์๋ฐ์คํฌ๋ฆฝํธ์๋ ์๋ ์ฌ์ฉ์ ์ง์ ํ์

- ๋ง์ฐ์ค ์ปค์ ์ฌ๋ฆฌ๋ฉด ์ ์ฅ๋ ์ซ์๊ฐ ํ์๋จ
- ์์๊ฐ ์ซ์๋ฅผ ์ง์ ํ๊ฑฐ๋ ํ์์ ๋ฐ๋ผ ์์์ ์ซ์๋ฅผ ๋ชจ๋ ์๋ณ์์ ๊ณ ์ ํ ๊ฐ์ผ๋ก ํ ๋นํ ์ ์์
- ํ ์คํธ๋, ํผํฉ๋ ํ ๋น ๊ฐ๋ฅ
enum Role { ADMIN = 'ADMIN', READ_ONLY = 100, AUTHOR = 200 };
- ์ฌ๋์ด ์ฝ์ ์ ์๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋งคํ๋ ๊ฐ์ด ์๋ ์๋ณ์๊ฐ ํ์ํ ๋ ์ฌ์ฉ
Any
- ๊ฐ์ฅ ์ ์ฐํ ํ์
- ์ด ํ์ ์ ํ์ ์คํฌ๋ฆฝํธ์ ์ด๋ค ๊ฒ๋ ์ดํด์ํค์ง ์์
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฐ๋ ๊ฒ๊ณผ ๋ค๋ฅผ ๋ฐ ์๊ฒ ๋จ
- any ํ์ ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์์น์์๋ ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ๊ฐ ์๋ํ์ง ์๊ฒ ๋จ
- ์ด๋ค ๊ฐ์ด๋ ์ข ๋ฅ์ ๋ฐ์ดํฐ๊ฐ ์ด๋์ ์ ์ฅ๋ ์ง ์ ํ ์ ์ ์๋ ๊ฒฝ์ฐ์ ๋๋นํ๊ฑฐ๋
- ๋ฐํ์ ๋์ค ํน์ ๊ฐ์ ์ํํ๊ณ ์ ํ๋ ์์ ์ ๋ฒ์๋ฅผ ์ขํ๊ธฐ ์ํด ์ฌ์ฉ
- ๊ทธ ์ธ์ ๊ฒฝ์ฐ any๋ฅผ ์ฐ์ง ์๋๊ฒ ์ข์
union (์กฐํฉ ํ์ )
- ์๋ก ๋ค๋ฅธ ๋ ์ข ๋ฅ์ ๊ฐ์ ์ฌ์ฉํด์ผ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์
- ํจ์๋ ์์, ๋ณ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด ์ ๋์ธ ํ์ ์ ์ฌ์ฉํ์ฌ
- ํ์ ์คํฌ๋ฆฝํธ์๊ฒ ์ซ์๋ ๋ฌธ์์ด ์ค ํ๋๋ฅผ ์ฌ์ฉํด๋ ๊ด์ฐฎ๋ค๋ ๊ฒ์ ์๋ฆด ์ ์์
function combine(input1: number | string, input2: number | string) {
let result;
if (typeof input1 === "number" && typeof input2 === "number") {
result = input1 + input2;
} else {
result = input1.toString() + input2.toString();
}
return result;
}
๋ฆฌํฐ๋ด ํ์
- ๋จ์ํ ํน์ ๋ณ์๋ ๋งค๊ฐ๋ณ์๊ฐ ์๋
- ์ซ์๋ ๋ฌธ์์ด๋ ์๋๋ฉฐ ์ ํํ ๊ฐ์ ๊ฐ์ง๋ ํ์
function combine(
input1: number | string,
input2: number | string,
resultConversion: "as-number" | "as-text"
) {
let result;
if (
(typeof input1 === "number" && typeof input2 === "number") ||
resultConversion === "as-number"
) {
result = +input1 + +input2;
} else {
result = input1.toString() + input2.toString();
}
return result;
// if (resultConversion === "as-number") {
// return +result; // ์ซ์๋ก ๋ณํํด์ฃผ๋ + ๊ธฐํธ๋ฅผ ์
๋ ฅ
// } else {
// return result.toString();
// }
}
const combinedAges = combine(30, 26, "as-number");
console.log(combinedAges);
const combinedStringAges = combine("30", "26", "as-number");
console.log(combinedStringAges);
const combinedNames = combine("Max", "Anna", "as-text");
console.log(combinedNames);
ํ์ ์๋ฆฌ์ด์ค / ์ฌ์ฉ์ ์ ์ ํ์
- ํ์ ๋ณ์นญ์ ์ฌ์ฉํ์ฌ ํ์ ์ ์ง์ ์์ฑ
- ์ ๋์จ ํ์ ์ ๊ฐ๊ฒฐํ๊ณ ๊ฐํธํ๊ฒ ์ฌ์ฉ๊ฐ๋ฅ
- ์ ๋์จ ํ์ ์ ์ ์ฅํ๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ๋ณต์กํ ์ ์๋ ๊ฐ์ฒด ํ์ ์๋ ๋ณ์นญ ๋ถ์
- ํ์ ๋ณ์นญ์ ์ฌ์ฉํ๋ฉด ๋ถํ์ํ ๋ฐ๋ณต์ ํผํ๊ณ ํ์ ์ ์ค์ฌ์์ ๊ด๋ฆฌํ ์ ์์
- ํ์ ์ค์ ์ด ํ์ํ ์ฝ๋ ์ด๋์๋ ์ฌ์ฉ ๊ฐ๋ฅ
- ํ์ ์๋ฆฌ์ด์ค ์ฌ์ฉ ์
// ํ์
์๋ฆฌ์ด์ค ์ฌ์ฉ์
function greet(user: { name: string; age: number }) {
console.log('Hi, I am ' + user.name);
}
function isOlder(user: { name: string; age: number }, checkAge: number) {
return checkAge > user.age;
}
// ๋จ์ํ ํ
type User = { name: string; age: number };
function greet(user: User) {
console.log('Hi, I am ' + user.name);
}
function isOlder(user: User, checkAge: number) {
return checkAge > user.age;
}
ํจ์ ๋ฐํ ํ์ ๋ฐ ๋ฌดํจ
- ํจ์์๋ ํ์ ๋ณด๋ค ์ค์ํ๊ฒ ํ๋ ์๋๋ฐ
- ๋ฐํ(return) ํ์ ์
- ๋ฐํ ํ์ ์ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์ถ๋ก ํจ
- undefined๋ ํ์ ์คํฌ๋ฆฝํธ์์๋ ํ์ ์
- void๋ ๋ฐํ๋ฌธ์ด ์์๋ ์ฐ์ด๋ ํ์
- ๋๋ฌผ๊ฒ ์ฐ์ด๋ undefined๋ ์ค์ ๊ฐ์ ๋ฐํํ์ง ์์ ๋ ์ฌ์ฉํ ์ ์์
- ๊ฐ์ ๋ฐํํ์ง ์๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ void๋ฅผ ํ์ค์ผ๋ก ์ฌ์ฉ
- void๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ ์ ์์ง๋ง ํ์ ์คํฌ๋ฆฝํธ๋ ์ด ์ฝ๋๋ฅผ ์ถ๋ก ํ ์ ์๋ ์ฐจ์ด๊ฐ ์์
ํ์ ์ ๊ธฐ๋ฅ์ ํ๋ ํจ์
- ํจ์๋ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์ ๊ณตํ๋ ํ์ ์
- ํจ์ ํ์ ์ ํจ์์ ๋งค๊ฐ๋ณ์ ๋ฐ ๋ฐํ ํ์ ์ ์ ์
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ด ํ์ดํ ํจ์ ํ๊ธฐ๋ฒ์ ๋ฐ๋ผ ๋ง๋ค์ด ์ง
let combineValues: (a: number, b: number) => number;
ํจ์ ํ์ ๋ฐ ์ฝ๋ฐฑ
- ์ฝ๋ฐฑ๊ณผ ํจ์ ํ์ ์ ๊ฑฐ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์๋ ํจ
- ์ฝ๋ฐฑ ํจ์๋ ์์ ์ด ์ ๋ฌ๋๋ ์ธ์๊ฐ ๋ฐํ ๊ฐ์ ๊ธฐ๋ํ์ง ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ ๋ฐํํ ์ ์์
function sendRequest(data: string, cb: (response: any) => void) {
// ... sending a request with "data"
return cb({data: 'Hi there!'});
}
sendRequest('Send this!', (response) => {
console.log(response);
return true;
});
์ ์ ์๋ ํ์ unknown
let userInput: unknown;
let userName: string;
userInput = 5;
userInput = "yum";
if (typeof userInput === "string") {
userName = userInput;
}
์ ๋ ํ์ never
- ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋ void์ ๋ฌ๋ฆฌ
- never๋ ํจ์๊ฐ ๋ฐํํ ์ ์๋ ํ์
- never๋ฅผ ๋ฐํํ๋ฉฐ ๋ฐํ๊ฐ์ ์์ฑํ์ง ์์
// ์๋ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋๊ธฐ๋ ์ ํธ๋ฆฌํฐ ํจ์
function generateError(message: string, code: number):never {
throw { message: message, errorCode: code };
}
generateError("An error occurred!", 500);
- never๋ฅผ ํ ๋นํ์ง ์๊ณ ๋ง์ฐ์ค ์ปค์๋ฅผ ์ฌ๋ฆฌ๋ฉด void๊ฐ ์ถ๋ก ๋จ
- never๊ฐ ์๋ก์ด ์ ํ์ด ์๋๊ธฐ ๋๋ฌธ
- ์ด ํจ์๋ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํฌ๋ฆฝํธ๋ ์คํฌ๋ฆฝํธ์ ์ผ๋ถ๋ฅผ ์ถฉ๋์ํค๊ธฐ ์ํ ๊ฒ์์ ๊ฐ๋ฐ์๊ฐ ์ ์ ์์
LIST