타입스크립트에 많은 타입 구분은 사실 불필요하다.
모든 변수에 타입을 선언하는 것은 비생산적이고, 형편없는 스타일이다.
let x: number = 12; // 불필요
let x = 12; // 충분
x에 타입을 선언하지 않고 할당을 하더라도 마우스를 가져다 데 보면 이미 number로 추론되고 있음을 알 수 있다.
타입 추론이 된다면, 명시적 타입 구문은 불필요하다.
객체나 배열도 타입 추론이 가능하다.
function square(nums: number[]) {
return nums.map(x => x*x);
}
const square = square([1,2,3,4]); // 타입은 number[]
비구조화 할당문은 타입 추론이 된다. 명시적 타입 구문을 넣을 경우 불필요한 타입 선언이 된다.
interface Product {
id: string;
name: string;
price: number;
}
function logProduct(product: Product) {
const {id, name, price} = product; // 타입 추론
}
--- 불필요한 선언 ---
function logProduct(product: Product) {
const {id, name, price): {id: string, name: string, price: number} = product;
}
<aside> ❓ 비구조화 할당문에 타입 추론을 사용할 때는 타입이 여러 가지가 있을 때, 그 타입을 고정하기 위해서 사용할 수 있을거 같다.
</aside>
base값을 넣을 경우에도 타입 추론이 된다.
function parseNumber(str: string, base=10) {
// ... base는 타입 number로 추론된다.
}
타입 구문을 제거하면, 잉여 속성 체크가 동작하지 않고, 실제 사용처에서 에러가 발생한다.
const furby = {
name: 'F',
id: 1,
price: 10
}
logProduct(furby); // ... 형식의 인수는 Product 형식의 매게변수에 할당될 수 없습니다. ....