아이템 19 : 추론 가능한 타입을 사용해 장황한 코드 방지하기

타입스크립트에 많은 타입 구분은 사실 불필요하다.

모든 변수에 타입을 선언하는 것은 비생산적이고, 형편없는 스타일이다.

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 형식의 매게변수에 할당될 수 없습니다. ....