728x90
728x90
타입 추론 (Type Inference)
- 코드에서 명시적으로 타입을 지정하지 않아도, 컴파일러가 타입을 자동으로 추론하는 기능
# Best Common Type
- 여러 타입의 값이 포함된 구조에서 가장 적절한 공통 타입을 추론하는 방식
let mixedArray = [1, 2, "hello"]; // 변수를 (string | number)[] 타입으로 추론
function getValue(condition: boolean) {
return condition ? "hello" : 42; // 반환 타입을 (string | number) 타입으로 추론
}
# Contextual Typing
- 코드의 문맥을 기반으로 타입을 추론하는 방식
// window.onmousedown에 할당된 함수라는 맥락을 통해,
// 파라미터인 e가 MouseEvent 타입으로 추론될 수 있음
window.onmousedown = function (e) {
console.log(e.button); // mouseEvent가 MouseEvent 타입으로 추론됨
};
# Duck Typing
- 타입이 명시적으로 일치하지 않더라도, 해당 객체가 필요로 하는 속성/메서드를 가지고 있으면 해당 타입으로 간주하는 방식
- 객체의 실제 타입이 아닌, '구조'를 보고 타입을 결정함
- 용어 유래 : '만약 어떤 새가 오리처럼 걷고, 헤엄치고, 꽥꽥 소리를 낸다면 그 새를 오리라고 부를 것이다'
interface Animal {
name: string;
makeSound(): void;
}
let duck = {
name: "Donald",
makeSound: () => console.log("Quack!")
};
function sound(animal: Animal) {
animal.makeSound();
}
// duck은 Animal의 속성/메서드를 가지고 있으므로, Animal 인터페이스를 따른다고 간주됨
sound(duck);
타입 단언 (Type Assertion)
- 컴파일러에게 특정 값이 특정 타입이라고 단언하는 것
- 타입 추론이 개발자의 의도와 다를 때, 개발자가 직접 원하는 타입을 지정하여 타입 검사를 우회할 수 있음
→ 런타임 에러가 발생할 수 있으니 유의
let someValue: any = "this is a string";
// any 타입인 someValue를 string으로 간주하여 length 속성을 사용할 수 있게 함
let strLength: number = (someValue as string).length;
interface User {
name: string;
age: number;
}
// 타입 단언 X
// User 인터페이스의 필수 속성을 포함하고 있지 않기 때문에 에러 발생
let test1: User = {};
// 타입 단언 O
// 에러가 발생하지 않음
let test2 = {} as User;
320x100
반응형
'TypeScript' 카테고리의 다른 글
[TypeScript] 타입 가드 (Type Guard) (0) | 2024.11.15 |
---|---|
[TypeScript] 타입 별칭 (Type Alias) (0) | 2024.11.10 |
[TypeScript] 유니언 타입 & 인터섹션 타입 (0) | 2024.11.09 |
[TypeScript] 인터페이스 (Interface) (0) | 2024.11.08 |
[TypeScript] 기본 타입 (4) | 2024.11.07 |