λ°°μ΄
λ°°μ΄μ λͺ¨λ μμκ° λμΌν νμ μ κ°λλ‘ λͺ μ
=> λ°°μ΄ λ΄λΆ μμμ νμ μμ μ± μ 곡
νν λ°©μ
- νμ μ΄λ Έν μ΄μ : type[] (μμ£Ό μ¬μ©λλ νν)
- μ λλ¦ νμ μ¬μ© : Array<type>
// λ°°μ΄ νμ
λ°©λ² 1 : type[]
let nums: number[] = [1, 2, 3, 4, 5];
let strs: string[] = ['a', 'b', 'c'];
let bools: boolean[] = [false, false, true];
nums.push(6);
nums.push(7);
bools.push(true)
// λ¬Έμμ΄ νμ
μ μ«μ νμ
μ ν λΉν μ μμ
// nums.push('8');
// num[0] = '1';
// bools.push(1)
// λ°°μ΄ νμ
λ°©λ² 2 : Array<>
let nums1: Array<number> = [1, 2, 3, 4, 5];
let strs1: Array<string> = ['a', 'b', 'c'];
let nums: number[] = [1, 2, 3, 4, 5]
let color: string[]
- λ€μ°¨μ λ°°μ΄
let matrix: number[][] = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
];
- νΌν© νμ λ°°μ΄
let mixedArray: (number | string)[] = [1, "two", 3, "four"];
| λ μ λμ¨ νμ μΌλ‘ numberλ string νμ μ€ νλμμ μλ―Ένλ€.
κ°μ²΄
κ°μ²΄μ ꡬ쑰 λ° κ° μμ±κ³Ό ν΄λΉ μμ±μ νμ μ λͺ μμ μΌλ‘ μ μ
=> κ°μ²΄μ νν/ꡬ쑰λ₯Ό 보μ₯νκ³ μμΈ‘ν΄ μμμΉ λͺ»ν κ°μ΄ λ€μ΄κ°λ κ²μ λ°©μ§
interface font {
fontFamily: string;
fontSize: number;
fontUnit?: 'px' | 'rem' | 'em';
fontweight?: number;
color: string;
isUnderline: boolean;
}
let monitor: { brand: string; price: number };
monitor = {
brand: 'LG',
price: 120,
};
// νμ
μ€λ₯
// monitor.price="123"
// monitor.displaySize="12inch"
κ°μ²΄μ Property νμ
- optional(μ΅μ λ) : νΉμ μμ±μ΄ νμκ° μλ μ νμ μμ νν, μμ± μ΄λ¦ λ€μ ? μΆκ°
- readonly(μ½κΈ° μ μ©) : κ°μ²΄μ μμ±μ΄ μμ λμ§ μμμΌ ν λ μ¬μ©, μμ± μ΄λ¦μμ readonly ν€μλ μΆκ°
// Optional property
let user: { id: string; name: string; age?: number };
user = {
id: '12312',
name: 'hykim',
// ageλ μ νμ μμ±
};
// Readonly property
let user1: { readonly id: string; name: string; age?: number };
user = {
id: '12312',
name: 'hykim',
};
user1.name = 'John';
// user1.id = '123123344'; // id μμ±μ Readonlyμ΄κΈ° λλ¬Έμ κ° λ³κ²½λΆκ°
let apiconfig: {
readonly clientKey: string;
readonly url: string;
};
νμ λ³μΉ(Type Alias)
κ°μ²΄μ ꡬ쑰λ₯Ό μ μνκ³ μ μλ ꡬ쑰μ μ΄λ¦μ λΆμ¬νλ λ°©λ²μΌλ‘ type ν€μλ μ¬μ©
// Type Alias
type UserType = {
id: string;
name: string;
age: number;
};
let user1: UserType = {
id: '1',
name: 'John',
age: 20,
};
let user2: UserType = {
id: '2',
name: 'Sarah',
age: 25,
};
let users: UserType[];
users.push(user1);
users.push(user2);
// userTypeμ λ§λ νμμ΄ μλκΈ° λλ¬Έμ μ€λ₯
users.push({});
users.push({ id: '1' });
- Nested κ°μ²΄
// Nested κ°μ²΄ (μ€μ²© κ°μ²΄)
type Payload = {
timestamp: number;
type: string;
user: {
id: string;
isActive: boolean;
};
};
const payload: Payload = {
timestamp: 190678689,
type: 'event',
user: {
id: '1234',
isActive: true,
},
};
ν¨μ
ν¨μμ νλΌλ―Έν°(λ§€κ°λ³μ)μ λ°νκ°μ νμ μ§μ
=> μμμΉ λͺ»ν νμ μ μΈμκ° μ λ¬λκ±°λ νμ μ κ°μ΄ λ°νλλ κ²μ λ°©μ§
=> ν¨μ μκ·Έλμ²λ‘ ν΄λΉ ν¨μμ μ¬μ©λ²μ μμ°μ€λ½κ² λ¬Έμν
ν¨μμ νμ
Parameter νμ
ν¨μμ μ λ¬νλ λ§€κ°λ³μμ λ°μ΄ν° νμ λ° μ¬λ°λ₯Έ κ°μ μ λ¬ νμΈ
// Parameter
function add(x: number, y: number): number {
return x + y;
}
add(1, 1);
const result = add(10, 5);
// quantityμ κΈ°λ³Έκ° λΆμ¬
function addToCart(name: string, price: number, quantity: number = 1) {
return `${name}, ${price}, ${quantity}`;
}
addToCart('orange', 100); // 'orange, 100, 1' λ°ν
addToCart('greentea', 50, 4);
Optional Parameter νμ
ν¨μμ νμκ° μλ μ νμ λ§€κ°λ³μ μ§μ κ°λ₯
function addToCart(name: string, price: number, quantity?: number) {
return `${name}, ${price}, ${quantity}`;
// ifλ¬ΈμΌλ‘ quantity κ°μ΄ μμ κ²½μ°μ μμ κ²½μ°λ‘ μ²λ¦¬νκ±°λ
// μλμ²λΌ quantityμ νμ
μ°μ°μλ‘ μ²λ¦¬ν΄μ€ μ μλ€.
// return `${name}, ${price}, ${quantity || 1}`;
}
addToCart('orange', 100); // 'orange, 100' λ°ν
addToCart('greentea', 50, 4);
Contextual νμ
ν¨μμ λ§₯λ½μ λ°λΌ μλμΌλ‘ νμ μ μΆλ‘
map(), reduce(), filter(), forEach() κ°μ λ°°μ΄ λ©μλμ μ½λ°±ν¨μμμ μ£Όλ‘ μ¬μ©νκ³ ,
μ½λ°±μ μΈμμΈ elementμ νμ μ λ°°μ΄μ μμ νμ μ κΈ°μ€μΌλ‘ μλ μΆλ‘ λ¨
const numbers: number[] = [1, 2, 3, 4, 5];
const letters: string[] = ['a', 'b', 'c', 'e'];
numbers.map((el) => {
el.toFixed(2);
});
letters.forEach((letter) => {
letter.toUpperCase();
});
Return νμ
ν¨μκ° λ°ννλ κ°μ λ°μ΄ν° νμ λͺ μ
function addTwoValue(x: number, y: number): string {
return `${x}${y}`;
}
function addToNumbers(x: number, y: number): number {
return x + y;
}
function isTen(x: number, y: number): boolean {
return x + y === 10;
}
// νμ΄ν ν¨μ
const add = (x: number, y: number): number => {
return x + y;
};
void λ°ν νμ
ν¨μκ° λͺ μμ μΌλ‘ κ°μ λ°ννμ§ μμμ νν
never λ°ν νμ
ν¨μκ° κ°μ λ°ννμ§ μμμ μ격νκ² νν
// void, never
function logMessage(message: string): void {
console.log(message);
}
function throwError(message: string): never {
throw new Error(message);
}
μ λμΈ νμ (Union Types)
μ¬λ¬ νμ μ€ νλκ° λ μ μλ κ°μ νννλ©°, μ§ν© μ΄λ‘ μ ν©μ§ν©κ³Ό λμΌν κ°λ
μλ‘ λ€λ₯Έ νμ μ κ°μ νλμ λ³μμ ν λΉν μ μμΌλ©° | λ₯Ό μ¬μ©
let userId: string | number;
userId = 1;
userId = '123129afds';
// νμ
μλ¬ λ°μ
userId = true;
userId = {};
function printUserId(id:string|number){
console.log(id)
}
printUserId("1") // "1"
printUserId(1) // 1
Type Narrowing
μ λμΈ νμ μ ꡬ체μ μΈ νμ νμ μ μ’νλκ°λ λ°©μ, νμ μ’νκΈ°λΌκ³ λ ν¨
function processValue(value: number | string) {
// λ¬Έμμ΄μ κ²½μ°
if (typeof value === 'string') {
return value.toUpperCase()
}
// μ«μμ κ²½μ°
return value.toString().toUpperCase();
}
λ°°μ΄
μλ‘ λ€λ₯Έ νμ μ μμλ₯Ό ν¬ν¨ν μ μλ λ°°μ΄μ μ μν΄ μ μ°μ± μ¦κ°
// λ°°μ΄ μμ
let mixedValues: (string | number)[] = [];
mixedValues.push("100")
console.log(mixedValues)
mixedValues.push(100)
console.log(mixedValues)
리ν°λ΄
μ νλ κ°μ κ°μ§ νμ (νΉμ λ¬Έμμ΄ / μ«μμ μ§ν©)μ νν
const toggle = (option: "on" | "off") => {
console.log(option)
}
toggle("on")
toggle("off")
// toggle("adfasdf") // νμ
μλ¬
// ---------------------------
type Size = "xs" | "s" | "m" | "l" | "xl"
let tShirtSize: Size;
tShirtSize = "m"
// tShirtSize = "xxl" // νμ
μλ¬
// ν¨μ νλΌλ―Έν° μ¬μ©
function setSize(size: Size) {
switch (size) {
case "xs": break;
case "s": break;
case "m": break;
}
}
// ---------------------------
type SuccessCode = 200 | 201 | 202
type ErrorCode = 500 | 501 | 503
let responseCode: SuccessCode | ErrorCode
responseCode = 200
responseCode = 503
responseCode = 404 // νμ
μλ¬
'typescript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
TypeScript / μ λ€λ¦ (2) | 2025.06.05 |
---|---|
TypeScript / ν΄λμ€ (0) | 2025.06.05 |
TypeScript / νμ μΆλ‘ , νμ λ¨μΈ (0) | 2025.06.05 |
TypeScript / νμ (2) (0) | 2025.06.04 |
TypeScript / κ°μ (0) | 2025.06.02 |