νμ κ°λ Narrowing
- μμ½
- typeof λ³μ
- μμ±λͺ in μ€λΈμ νΈ μλ£
- μΈμ€ν΄μ€ instanceof λΆλͺ¨
- νμ κ°λλ νΉμ μμ±μ΄λ λ©μλλ₯Ό μ¬μ©νκΈ° μ μ
- κ·Έκ²μ΄ μ‘΄μ¬νλμ§ νμΈνκ±°λ νμ μ μ¬μ©νκΈ° μ μ μ΄ νμ μΌλ‘ μ΄λ€ μμ μ
- μνν μ μλμ§λ₯Ό νμΈνλ κ°λ
- λ°νμ μ νΉμ νμ μΌλ‘ μμ μ μννκΈ° μ μ ν΄λΉ νμ μ κ²μ¬νλ μ½λ ν¨ν΄
- μμ μ μννκΈ° μ μ νμ μ κ²μ¬νμ¬ λ°νμ μ€λ₯λ₯Ό λ°©μ§ν μ μμ
- κ°μ²΄μ κ²½μ°, instanceofλ inμ μ¬μ©
- λ€λ₯Έ νμ λ€μ κ²½μ° typeofλ₯Ό μ¬μ©
// typeof
type Combinable = string | number;
function add(a: Combinable, b: Combinable){
if(typeof a === 'string' || typeof b === 'string'){
return a.toString() + b.toString()
}
return a + b;
}
- μ λμ¨ νμ μ΄ μ§λ μ μ°μ±μ νμ©ν μ μκ² ν΄μ€
- λ°νμ μ μ½λκ° μ ννκ² μλνκ² ν΄μ€
// in
// μμ±μ inμ μ΄μ©ν΄μ νμΈ
const e1: ElevatedEmployee = {
name: "yumi",
privileges: ["create-server"],
startDate: new Date(),
};
function printEmployeeInformation(emp: UnknownEmployee) {
console.log("Name: " + emp.name);
if ("privileges" in emp) {
console.log("Privilages: " + emp.privileges);
}
if ("startDate" in emp) {
console.log("startDate: " + emp.startDate);
}
}
printEmployeeInformation(e1);
// instanceof νμ
κ°λ
class Car {
drive() {
console.log('Driving...');
}
}
class Truck {
drive() {
console.log('Driving a truck...');
}
loadCargo(amount: number){
console.log('Loading cargo...' + amount);
}
}
type Vechicle = Car | Truck
const v1 = new Car()
const v2 = new Truck()
function useVechicle(Vechicle: Vechicle) {
Vechicle.drive()
if(Vechicle instanceof Truck){
Vechicle.loadCargo(1000)
}
}
useVechicle(v1)
useVechicle(v2)
discriminated μ λμΈ
- νμ κ°λλ₯Ό μ½κ² ꡬνν μ μκ² ν΄μ£Όλ μ λμΈ νμ μΌλ‘ μμ μ
- μνν λ μ¬μ©ν μ μλ ν¨ν΄
- κ°μ²΄ νμ μΌλ‘ μμ ν λλ μ¬μ© κ°λ₯
- κ²°λ‘ : κ°μ²΄μ μ λμΈ νμ μ μ¬μ©ν μμ μ μ¬μ©νλ ν¨ν΄
interface Bird {
type: 'bird'
flyingSpeed: number
}
interface Horse {
type: 'horse'
runningSpeed: number
}
type Animal = Bird | Horse
function moveAnimal(animal: Animal) {
let speed;
switch (animal.type) {
case 'bird':
speed = animal.flyingSpeed
break
case 'horse':
speed = animal.runningSpeed
}
console.log('Moving at speed: ' + speed);
}
moveAnimal({type: 'bird', flyingSpeed: 10})
- μΈν°νμ΄μ€μλ μλνλλ°, μ΄ μΈν°νμ΄μ€λ μΈν°νμ΄μ€λ₯Ό κΈ°λ°μΌλ‘
- ꡬμΆλ λͺ¨λ κ°μ²΄κ° μ΄ νμ μ κ°λλ‘ νκΈ° λλ¬Έ
- μ£Όμ΄μ§ μμ±μ μ‘΄μ¬ μ¬λΆλ₯Ό νμΈνκ±°λ instanceofλ₯Ό μ¬μ©νλ κ² μλ
- μ€μ μ‘΄μ¬νλ μμ±μ μ¬μ©νμ¬ μ΄λ€ μ νμ κ°μ²΄μ μμ νκ³ μλμ§ νμΈ κ°λ₯
ν λ³ν(typecasting)
- ν λ³νμ νμ μ€ν¬λ¦½νΈκ° μ§μ κ°μ§νμ§ λͺ»νλ νΉμ νμ μ κ°μ νμ μ€ν¬λ¦½νΈμ μλ €μ£Όλ μν
- ν λ³νμ λκ°μ§ ꡬ문μΌλ‘ ꡬνν μ μμ
1. λ³ννκ³ μ νλ μμ μμ΄λ νμ μ€ν¬λ¦½νΈμ νμ μ μλ €μ£Όκ³ μ νλ μμΉ μμ <HTMLInputElement> ν€μλ μΆκ°νλ λ°©λ²
const userInputElement = <HTMLInputElement>document.getElementById('user-input')!
userInputElement.value = 'Hi there!'
- μ΄ νμ μ μ μμ μΌλ‘ μ¬μ© κ°λ₯
- tsconfigνμΌ λ΄μ dom libμ΄ ν¬ν¨λμ΄ μκΈ° λλ¬Έ
2. μ νν λΆλΆ λ€μμ as ν€μλ μ¬μ©
const userInputElement = document.getElementById('user-input')! as HTMLInputElement
userInputElement.value = 'Hi there!'
- λλνλ₯Ό μ¬μ©νμ¬ λλν μμ ννμμ nullλ‘ λ°ννμ§ μκ² λ€κ³ νμ μ€ν¬λ¦½νΈμκ² μΈμμν΄
- λ°λ©΄, μ΄κ²μ΄ nullμ λ°ννμ§ μμ κ²μ΄λΌλ νμ μ΄ λ€μ§ μλ κ²½μ° ifλ¬Έμ μ¬μ©
// const userInputElement = <HTMLInputElement>document.getElementById('user-input')!
const userInputElement = document.getElementById('user-input');
if (userInputElement) {
(userInputElement as HTMLInputElement).value = 'Hi there!'
}
μΈλ±μ€ μμ±
interface ErrorContainer{ // { email: 'Not a valid email', username: 'Must start with a character!}
[prop: string]: string; // λͺ¨λ μμ±μ λ¬Έμμ΄ κ° νμ
μ΄ μμ΄μΌ νλ€κ³ μ€μ
}
const errorBag: ErrorContainer = {
// 1: μ΄λΌκ³ μ
λ ₯ν΄λ μκ΄μμ. λͺ¨λ λ¬Έμμ΄λ‘ μΈμνκΈ° λλ¬Έ
email: 'Not a valid email!',
username: 'Must start with a capital character!'
};
ν¨μ μ€λ²λ‘λ
- λμΌν ν¨μμ λν΄ μ¬λ¬ ν¨μ μκ·Έλμ²λ₯Ό μ μν μ μλ κΈ°λ₯
- κ°λ¨ν λ§ν΄, λ€μν λ§€κ°λ³μλ₯Ό μ§λ ν¨μλ₯Ό νΈμΆνλ μ¬λ¬κ°μ§ λ°©λ²μ μ¬μ©νμ¬
- ν¨μ λ΄μμ μμ μ μνν μ μκ² ν΄μ€
- ν¨μ μ€λ²λ‘λλ μ£Όμ ν¨μ λ°λ‘ μμ κ°μ μ΄λ¦μ μ λ ₯νλ κ²
- κ·Έλ¦¬κ³ μ΄ ν¨μλ₯Ό νΈμΆνλ λ° λ μΈμκ° λͺ¨λ μ«μνμ΄λ©΄ μ΄ ν¨μλ μ«μνμ λ°ννλ€κ³ νμ μ€ν¬λ¦½νΈμκ² μλ €μ€
function add(a: number, b: number): number;
function add(a: string, b: string): string;
function add(a: string, b: number): string;
function add(a: number, b: string): string;
function add(a: Combinable, b: Combinable) {
if (typeof a === "string" || typeof b === "string") {
return a.toString() + b.toString();
}
return a + b;
}
const result = add("yuum", "schwarz");
result.split("");
- νμ μ€ν¬λ¦½νΈκ° μ체μ μΌλ‘ λ°ν νμ μ μ νν μΆλ‘ νμ§ λͺ»νλ κ²½μ°μ μ¬μ©
optinal 체μ΄λ
- μ μλμ΄ μλμ§ μ¬λΆκ° νμ€μΉ μμ μμ λ€μμ λ¬Όμνλ₯Ό μΆκ°
- μ΄ κΈ°λ₯μ νμ μ€ν¬λ¦½νΈ 3.7 μ΄μμμλ§ μ§μ
- μ νμ 체μ΄λ μ°μ°μλ κ°μ²΄ λ°μ΄ν°μ μ€μ²©λ μμ±κ³Ό κ°μ²΄μ μμ νκ² μ κ·Όν μ μκ² ν΄μ€
- μ¬μ€μ μ΄λ λ°μ΄ν°μ μ κ·ΌνκΈ° μ μ λ°μ΄ν°μ μ‘΄μ¬ μ¬λΆλ₯Ό νμΈνλ if λ¬ΈμΌλ‘ μ»΄νμΌ λ¨
const fetchedUserData = {
id: "u1",
name: "yumi",
// job: { title: "CEO", description: "My own company" },
};
console.log(fetchedUserData?.job?.title);
Null λ³ν©
- null λ°μ΄ν° μ²λ¦¬μ λμμ μ€
- μ΄λ€ λ°μ΄ν°λ μ λ ₯κ°μ΄ μλλ° κ·Έκ²μ΄ nullμΈμ§, undefinedμΈμ§, μ ν¨ν λ°μ΄ν°μΈμ§ μ μ μλ κ²½μ° μ¬μ©
const userInput = " ";
const storedData = userInput ?? "DEFAULT";
console.log(storedData);
LIST
'#1 Language π > 1-3 Typescript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Typescript] λ°μ½λ μ΄ν° Decorators (0) | 2023.12.23 |
---|---|
[Typescript] μ λ€λ¦ Generic <T> (1) | 2023.12.23 |
[Typescript] ν΄λμ€ & μΈν°νμ΄μ€ (1) | 2023.12.23 |
[Typescript] ꡬ쑰 λΆν΄ (1) | 2023.12.23 |
[Typescript] TypeScript μ»΄νμΌλ¬(λ° κ΅¬μ±) (1) | 2023.12.23 |