1.7 μ νμ΄ μλ νμ, νμ μ€ν¬λ¦½νΈ
νμ μ€ν¬λ¦½νΈλ?
TypeScript is JavaScript with syntax for types.
(= μλ°μ€ν¬λ¦½νΈ λ¬Έλ²μ νμ
μ μΆκ°ν κ²)
μ μ¬μ©νλκ°?
μλ°μ€ν¬λ¦½νΈλ λμ νμ
μΈμ΄μ΄κΈ° λλ¬Έμ μ½λλ₯Ό μ€ννμ λλ§ μλ¬λ₯Ό νμΈ ν μ μμ΅λλ€.
νμ§λ§ νμ
μ€ν¬λ¦½νΈλ λΉλ νμμ νμ
μλ¬λ₯Ό νμΈ ν μ μκΈ° λλ¬Έμ μλ¬λ₯Ό 미리 μ°Ύμ μ μμ΄ λλ²κΉ
νκΈ°μ μ 리ν©λλ€.
νμ μ€ν¬λ¦½νΈλ₯Ό μ¬μ©ν λ μ°Έκ³ ν ν
1. any λμ unknownμ μ¬μ©νμ
any νμ
μ λͺ¨λ νμ
μ λ°μλ€μ΄κΈ° λλ¬Έμ νμ
μ€ν¬λ¦½νΈμ μ΄μ μ μμ±λλ€.
λΆκ°νΌν κ²½μ°μλ§ μ¬μ©νλ κ²μ κΆμ₯ν©λλ€.
νμ
μ μμ§ λ¨μ ν μ μλ κ²½μ°μλ
unknownμ μ¬μ©ν ν νμ
κ°λλ₯Ό ν΅ν΄ νμ
μ μ’νλκ°λ κ²μ΄ μ’μ΅λλ€λ€.
2. νμ κ°λ
νμ
κ°λλ νμ
μ μ’νλ κ²μ μλ―Έν©λλ€.
νμ
κ°λλ₯Ό νλ λ°©λ²μλ μ¬λ¬ κ°μ§κ° μμ΅λλ€.
instanceofμ typeof
function padLeft(padding: number | string, input: string): string {
if (typeof padding === 'number') {
return ' '.repeat(padding) + input;
}
return padding + input;
}
μμ κ°μ΄ paddingμ νμ
μ΄ ν κ°μ§κ° μλ κ²½μ°,
typeofλ₯Ό μ¬μ©νμ¬ νμ
μ ꡬ체ν ν μ μμ΅λλ€.
class CustomError extends Error {
constructor() {
super();
}
get message() {
return '컀μ€ν
μλ¬μ
λλ€';
}
}
async function fetchSomething() {
try {
//fetchλ‘ μμ²μ νλ ν¨μ
} catch (e) {
//eλ unknown νμ
. Error νμ
μ λͺ
μμ μΌλ‘ μ
λ ₯ν΄μ€ μ μμ.
if (e instanceof CustomError) {
//do something
}
}
}
μμ κ°μ κ²½μ°μλ catch λ¬Έμ eμ νμ μ Error νμ μΌλ‘ λͺ μμ μΌλ‘ μ μΈν΄μ€ μ μκΈ° λλ¬Έμ
instanceof Error λλ Error νμ μ μμλ°μ ν΄λμ€λ₯Ό νμ©νμ¬ typeμ μ’ν νμ error μ²λ¦¬λ₯Ό ν΄μ€ μ μμ΅λλ€.
in
κ°μ²΄μ ν€κ° μ‘΄μ¬νλμ§ νμΈνλ μ©λλ‘ μ¬μ©λ©λλ€.
type Fish = { swim: () => void };
type Bird = { fly: () => void };
function move(animal: Fish | Bird) {
if ('swim' in animal) {
return animal.swim();
}
return animal.fly();
}
inμ μ¬μ©ν΄μ κ°μ²΄ μμ ν΄λΉ ν€κ°μ΄ μλμ§ νμΈνλ λ°©μμΌλ‘ νμ κ°λλ₯Ό ν μ μμ΅λλ€.
3. μ λ€λ¦
μ λ€λ¦μ λ€μν νμ μ κ°μΌλ‘ λΉμ·ν μμ μ ν λ μ¬μ©ν μ μμ΅λλ€.
function identity<Type>(arg: Type): Type {
return arg;
}
const myIdentity = identity<number>(123);
console.log(myIdentity);
// 123
const myIdentity2 = identity<string>('123');
console.log(myIdentity2);
// '123'
identity ν¨μλ μ λ€λ¦μ μ¬μ©νμ΅λλ€.
κ°μ λμμ νμ§λ§ ν¨μλ₯Ό μ¬μ©ν λ νμ
μ μ
λ ₯νμ¬ λ€μν νμ
μ μΈμλ€μ λ°μ μ μκ² νμ΅λλ€.
4. μΈλ±μ€ μκ·Έλμ²
κ°μ²΄μ ν€μ μνλ νμ μ λΆμ¬νλ λ°©μμ λλ€.
type OnlyBoolsAndHorses = {
[key: string]: boolean | Horse;
};
const conforms: OnlyBoolsAndHorses = {
del: true,
rodney: false,
};
λμ μΈ κ°μ²΄λ₯Ό μ μν λ μ μ©νμ§λ§,
ν€μ λ²μκ° μ§λμΉκ² 컀μ§κΈ° λλ¬Έμ κ°μ²΄μ ν€λ₯Ό λμ μΌλ‘ μ μΈνλ κ²½μ°λ₯Ό μ§μν΄μΌ ν©λλ€.
λ°νμ λκΉμ§ κ°μ²΄μ μμ±μ μ μ μμ κ²½μ°μλ§ μΈλ±μ€ μκ·Έλμ²λ₯Ό μ¬μ©νλ κ²μ κΆμ₯ν©λλ€.
(μλ₯Ό λ€μ΄ CSV νμΌμ λ‘λν΄μ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ κ²½μ°)
interface CatInfo {
age: number;
breed: string;
}
type CatName = 'miffy' | 'boris' | 'mordred';
//Record νμ
const cats: Record<CatName, CatInfo> = {
miffy: { age: 10, breed: 'Persian' },
boris: { age: 5, breed: 'Maine Coon' },
mordred: { age: 16, breed: 'British Shorthair' },
};
//맀νλ νμ
μ μ¬μ©ν μΈλ±μ€ μκ·Έλμ²
type Cat = { [name: 'miffy' | 'boris' | 'mordred']: CatInfo };
Recordλ 맀νλ νμ μ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
μ°Έκ³ :
μ΄νν°λΈ νμ μ€ν¬λ¦½νΈ