반환 타입을 명시하는 이유에는 두가지가 있습니다.
첫째, 반환 타입을 명시하면 함수에 대해 더욱 명확하게 알 수 있기 때문입니다.
둘째, 명명된 타입을 사용하기 위해서입니다.
다른 타입에는 별도의 변수를 사용하는 게 바람직한 이유는 다음과 같습니다.
1. 서로 관련이 없는 두개의 값을 분리합니다.
2. 변수명을 구체적을 지을 수 있습니다.
3. 타입 추론을 향상시키며, 타입 구문이 불필요해집니다.
4. 타입이 좀 더 간결해집니다.
5. let 대신 const로 변수를 선언하게 됩니다. const로 변수를 선언하면 코드가 간결해지고, 타입 체커가 타입을 추론하기에도 좋습니다.
변수의 값은 바뀔 수 있지만 타입은 일반적을 바뀌지 않습니다.
혼란을 막기 위해 타입이 다른 값을 다룰 때에는 변수를 재사용하지 않도록 합니다.
타입 넓히기(widening)란?
지정된 타일 값을 가지고 할당 가능한 값들의 집합을 유추하는 것을 의미합니다.
타입스크립트가 아무리 영리하다고 하더라도 사람의 마음을 읽을 수는 없습니다. 그렇기 때문에 추측한값이 항상 옳을 수는 없습니다.
그렇기 때문에 넓히기를 제어해야합니다.
let 대신 const로 변수를 선언하면 더 좁은 타입이 됩니다.
let x = 'x'; // x 는 string
const x = 'x'; // x는 "x"
let vec = {x: 10, y: 20, z: 30};
getComponent(vec, x); // let 사용시 에러 발생
const v: {x: 1|3|5} = {
x: 1,
};
아이템 26 참고
const v1 = {
x: 1,
y: 2,
}; // { x: number; y: number; }
const v2 = {
x: 1 as const,
y: 2,
}; // { x: 1; y: number; }
const v3 = {
x: 1,
y: 2,
} as const; // { readonly x: 1; readonly y: 2; }
<이펙티브 타입스크립트> (댄 밴더캅 지음, 장원호 옮김, 인사이트, 2021)