• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

as type과 type()의 차이가 뭔가요?

21.11.29 12:05 작성 조회수 238

0

1. 타입 지정에서 as type과 type()의 차이가 뭔가요? 제가 생각하기에는 as type의 경우 여러 개의 타입을 갖고 있는 변수에 as type을 쓰면 그 순간은 지정한 특정타입으로 동작하는 것으로 알고있고, type()의 경우 해당 변수를 type으로 형변환하는 것으로 알고 있는데요. 어떤 경우에 as type을 써야하는지 type()을 써야하는 지 헷갈려서 질문드립니다. 더불어 위와 같은 내용은 구글에서 어떤 식으로 찾아보면 좋을 지 키워드도 알려주시면 감사하겠습니다. 2. 혹시 타입스크립트 시퀄라이즈에 1번과 관련된 내용의 버그 같은게 있는 건가요? 아니면 제가 놓치고 있는 부분이 있을까요? 예를 들어 시퀄라이즈 DB 조회 후 getDataValue로 가져오는 타입은 any인데, 숫자에 1000단위마다 콤마를 적용하려고 toLocaleString("ko-KR")을 사용하는 경우 Number(product?.getDataValue("price")).toLocaleString("ko-KR") // "1,234" 의 경우 잘 변환되는데,
(product?.getDataValue("price") as number).toLocaleString("ko-KR") // "1234"은 올바르게 변환이 안되네요.
타입스크립트 플레이그라운드에서 간단히 테스트 했었을 때는 잘됐습니다. const test: any = 1234 console.log(Number(test).toLocaleString("ko-KR")); // "1,234" console.log((test as number).toLocaleString("ko-KR")); // "1,234"

답변 2

·

답변을 작성해보세요.

0

mznx0192님의 프로필

mznx0192

질문자

2021.11.29

vscode에서 getDataValue()의 리턴이 any라고 표현되서 any인 줄 알고 있었는데, string이 맞는 건가요??




그리고 답변 주신내용에서 자바스크립트 형변환을 사용해야한다고하셨는데,

const test = req.query.test 에서 string으로 쓰고 싶은 경우는

req.query.test as string 이 아닌 string(req.query.test) 라고 작성해야한다는 말씀이신거죠?

거기서 나오는 타이핑을 믿으시면 안 됩니다. 실제 타입이 무엇인지가 중요한 겁니다. 런타임에는 any라는 타입이 없습니다. 타입이 any로 나오면 타입시스템이 망가져서 스스로 해결해야한다고 보시면 됩니다.

0

1. 기본적으로 자바스크립트 형변환을 통해서 타입을 맞춰주셔야 합니다. as는 최후의 수단으로 타입을 강제로 지정하는 겁니다. 대부분의 경우는 타입스크립트 지식이 부족해서 as를 쓰거나, 라이브러리 타이핑이 이상해서 as를 씁니다.

2. getDataValue('...')는 string일 겁니다. 그래서 숫자에만 있는 toLocaleString이 에러가 나는 거고요. 그래서 Number나 parseInt, parseFloat으로 숫자로 변환해주어야 합니다.

타입스크립트 플레이그라운드로 할 때는 되는 이유가 test를 any로 지정해서 되는 것 같습니다. test를 string으로 해보세요.