명시적 타입 선언(콜론 타입 선언)과 as 타입 단언 차이
5
投稿した質問数 3
안녕하세요 6.8 Zustand를 이용해 세션 관리하기
4:52초에 타입 선언 부분에
타입 문의가 있어서요!
아래처럼 차이가 뭔지 잘 모르겟네요
강사님은 as 타입선언으로 자주 쓰시던데
ai 물어보니 initailState: State 이 형식이
명시적 타입 선언 이라 더 엄격해서 추천한다고 하던데 as로 타입 단언 하는 이유가 있으신가요?
const initailState: State = {
isLoaded: false,
session: null,
};
const initailState = {
isLoaded: false,
session: null,
} as State;
回答 1
0
안녕하세요, 인프런 AI 인턴입니다. 이민진님.
질문 주신 TypeScript의 명시적 타입 선언과 as 키워드를 이용한 타입 단언에 대해 간단히 설명해 드리겠습니다.
명시적 타입 선언 vs 타입 단언
명시적 타입 선언 (
const initailState: State = { ... };):- 변수 선언 시 타입을 명시적으로 지정합니다.
- TypeScript 컴파일러가 객체의 형태를 자세히 체크하여 선언한 타입(State)과의 일치 여부를 검사합니다.
- 타입 미스매치가 발생하면 컴파일러에서 오류를 즉시 감지할 수 있어 더 엄격하게 타입을 관리할 수 있습니다.
- 변수 선언 시 타입을 명시적으로 지정합니다.
타입 단언 (
as) (const initailState = { ... } as State;):- 데이터가 특정 타입임을 “개발자가 보증”한다고 선언합니다.
- TypeScript 컴파일러는 해당 객체를 그 타입으로 사용하도록 강제하지만, 타입 체크는 상대적으로 느슨하게 수행됩니다.
- 개발 단계에서 유연하게 객체를 선언하고 싶을 때 유용하게 사용할 수 있습니다.
- 데이터가 특정 타입임을 “개발자가 보증”한다고 선언합니다.
왜 as State를 사용하는가?
- 개발 편의성: 초기 데이터 설정 시 추가적인 변경 사항이나 기능이 추가됨에 따라 빠르게 적응하며 작업하기 쉽습니다.
- 유연한 타입 관리: 엄격하게 타입이 체크되지 않아 새로운 속성을 잠시 추가하거나, 타입 구조에 구애받지 않고 객체를 사용할 수 있습니다.
- 복잡한 타입 구조: 경우에 따라 복잡한 타입 정의가 필요한 객체에 대해 보다 관리하기 쉽게 접근할 수 있습니다.
그래서 as State는 개발 초기 단계에서 더욱 유연하고 빠르게 사용할 수 있으며, 타입 체크 과정에서의 제약을 느슨하게 만드는 대안으로 적합합니다. 그러나 이는 비교적 자유롭게 타입을 다루겠다는 의도일 뿐, 프로젝트의 요건이나 팀의 코드 스타일 등에 따라 적정한 방법을 결정하셔야 합니다.
참고 링크
관련된 토픽에 대해 더 알고 싶으시다면 아래 유사한 질문 답변을 참고하실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드립니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
useMutation 적용 후 새로운 글 등록시 content가 안보여요
0
34
2
6.8 zustand 세션 질문입니다.
0
79
2
next.js 강의에서도 리액트 라이브러리들을 다뤄주시나요?
0
64
2
shadcn에서 radix ui와 base ui 차이는 뭔가요?
0
226
2
updateTodo 함수 생성시 화살표 함수 사용 안하는 이유
0
69
2
4.11 바로 투두 삭제가 안됨 질문
0
77
3
매개변수 updatedTodo 관련 질문
0
60
3
인증 정보가 만료되었을 때 라우트 가드 처리가 궁금합니다!
0
75
2
supabase를 사용하지 않을 경우 세션 데이터의 변경을 감지하고 스토어에 보관하는 방법이 궁금합니다!
0
61
2
4.6 id를 string으로 변경시 오류
0
58
2
리액트 타입스크립트 관련 질문있습니다.
0
56
1
소셜 로그인 구현하기 관련하여 질문이 있습니다!
0
93
2
ui 파일 질문드립니다.
0
67
1
tanstack query devtools에서 질문있습니다!
0
61
2
댓글 삭제 시 isPending 질문
0
57
2
두번째 예외상황에 대해 질문있습니다!
0
58
1
리액트 쿼리 질문입니다
0
61
2
개발자도구에서 components 가 안보입니다.
0
83
3
state 관리에 대한 정리
0
73
3
[(2.4) Shadcn/ui를 소개합니다] 강의 Shadcn 세팅 관련 질문 있습니다.
0
154
3
like 테이블에서 왜 create_at이 필요한지 궁금합니다.
0
69
1
삭제가 바로 안되네요ㅠ
0
57
2
access 토큰은 꼭 소셜서버로부터 받아서 사용해야만하나요?!
0
74
2
전역 모달이 여러 개일 경우 모달 프로바이더는 몇 개가 필요한가요?
0
58
1

