var
, let
으로 변수를 선언할 때는 컴파일러에게 이 변수는 값이 변할 여지가 있다고 말해주는 반면 const
를 사용할 때는 이 변수는 값이 변하지 않는다고 말하는 것과 같다.
따라서 타입스크립트는 var
, let
을 사용할 때는 값이 변할 여지가 있으므로 string
타입으로 설정하고, const
를 사용할 때 해당 변수의 타입을 string
이 아닌 해당 값으로 설정하게 된다.
const hi = 'hi'; // type: 'hi'
let hello = 'hello'; // type: string
이렇게 잠재적으로 무한대의 경우의 수를 가지는 타입을 더 작고, 유한한 타입으로 좁히는 것을 Literal Types이라고 한다.
Index Signatures는 구체적인 속성값을 알지는 못하지만 타입은 알고 있을 때, 해당 타입을 지정해줌으로써 해당 타입의 값들로 객체에 접근할 수 있도록 해주는 방식이다.
객체에 접근하기 위한 key의 타입은 string
이 아니라 literal
type이어야 한다. Object.keys()
와 같은 방식으로 객체에 접근할 경우 반환값이 string[]
이기 때문에 컴파일 에러가 발생하게 된다.
따라서 Index Signatures를 사용하면 string 타입의 키로도 객체에 접근할 수 있다.
interface Foo {
[index: number]: string;
}
const foo: Foo = {
bar: 'bar',
};
const key: string = 'bar'; // type: string
console.log(foo[key]); // 'bar';