객체를 이용해서 상수를 보관하고 싶었다.
const LOGIN_INPUT_CONTENT = {
EMAIL: 'email',
PASSWORD: 'password',
}
하지만 이렇게 했을경우 LOGIN_INPUT_CONTENT안에 EMAIL,PASSWORD의 타입이 string으로 변경된다. call by reference이기 때문에 객체 안의 값은 얼마든지 바뀔 수 있기 때문이다.
그럼 LOGIN_INPUT_CONTENT을 타입으로 사용할 수 없게 된다.
이때 사용하는 키워드가 as const
이다. 말그대로 안에 키값도 상수로 못박아둠으로써 변경되지 않는다는것을 명시해준다.
const LOGIN_INPUT_CONTENT = {
EMAIL: 'email',
PASSWORD: 'password',
} as const
그럼 커서를 올렸을때 각각의 key에 해당되는 value가 나오면서 readonly로 보여진다.
그럼 이 객체의 value를 type으로 사용하고 싶다면? generic을 쓰면 된다. (아직까지 valueOf같은 키워드는 typescript에서 존재하지 않는다)
type valueOf<T> = T[keyof T]
const something = (value:valueOf<typeof LOGIN_INPUT_CONTENT>) => {}