tsc와 tsx가 타입검사를 안하는거 같습니다.
console.log("Hello TypeScript");
const a: number = "1";
console.log(typeof a)위와 같이 index.ts파일에서 number타입에 문자열 값을 집어넣게 되면
vscode 에서 Type 'string' is not assignable to type 'number'.ts(2322) 라는 오류를 발생시키지만
tsc로 실행하면 오류는 발생하지만 아래와 같이 js확장자로 컴파일이 진행됩니다.
console.log("Hello TypeScript");
var a = "1";
console.log(typeof a);
또한 tsx로 실행하면 오류없이 모두 출력됩니다.
두번째 콘솔에서는 a의 타입을 string으로 출력시키구요.
컴파일 과정중 타입검사를 진행해 오류가 발생하지 않을 경우 js로 변환한 뒤 node에서 실행하는 과정으로 알고있는데, 이게 왜 오류가 발생하지 않고 자연스럽게 tsc와 tsx가 실행되는것인지 궁금합니다.
답변 2
0
안녕하세요 이정환입니다.
우선 TypeScript 컴파일러의 동작은 tsconfig.json에 설정하는 옵션에 따라 유동적으로 변경될 수 있습니다. 따라서 기본적으로 아무 옵션도 커스텀 하지 않은 경우 말씀하신 것 처럼 타입 체킹시 오류가 발생하더라도 JS 파일로 컴파일은 완료됩니다. (타입 체킹은 동일하게 이루어집니다)
그러나 이렇게 되면 타입스크립트를 사용해 보다 견고한 프로그램을 작성하기 어려워지므로 보통의 Vite, Webpack 등을 사용하는 프로덕션에서는 타입체킹 에러 발생시 컴파일 결과로 JS 파일을 생성하지 않도록 하고 있습니다. 그리고 이를 명시적으로 설정하는 옵션은 noEmitOnError입니다.
따라서 다음과 같이 tsconfig.json의 compilerOptions를 설정하신 다음 다시 tsc로 컴파일 해 보시면 타입 에러 발생시 js 파일로 컴파일 되지 않을 것 입니다.
{
"compilerOptions": {
"noEmitOnError": true
}
}
0
안녕하세요, 인프런 AI 인턴입니다.
유재혁님께서 말씀하신 상황은 TypeScript가 제공하는 타입 검사와 관련된 것입니다. TypeScript는 타입 검사기(linter)를 통해 코드를 작성할 때 즉각적인 피드백을 제공합니다. 이는 개발 환경에서 타입 오류를 확인할 수 있지만, 실제 실행 시에는 JavaScript로 코드가 컴파일되며, 이 과정에서 타입 오류가 발생해도 JavaScript의 특성상 런타임에 오류 없이 실행될 수 있습니다.
주어진 코드:
console.log("Hello TypeScript");
const a: number = "1";
console.log(typeof a);
위 코드에서 TypeScript 타입 시스템에서는 a에 문자열 "1"을 할당하는 것이 문제라고 경고합니다. 하지만, tsx 또는 tsc 명령어를 사용할 때 타입 에러가 발생하더라도 코드가 JavaScript로 변환되어 동작하게 됩니다. 이는 TypeScript가 런타임 타입 시스템이 아니기 때문입니다.
타입 검사: TypeScript는 오직 컴파일 시간에 타입 검사를 합니다. 즉, 컴파일러는 런타임 오류를 방지하기 위해 타입 안전성을 제공합니다. 컴파일러가 경고를 하지만, 컴파일은 여전히 성공하여 JavaScript 파일이 생성됩니다.
컴파일 옵션: 일부 컴파일러 옵션에 따라 행동이 다릅니다. 예를 들어,
tsconfig.json에서"noEmitOnError": true옵션을 추가하면 타입 에러가 있을 때 JavaScript 파일이 생성되지 않도록 할 수 있습니다.
비슷한 문제를 겪은 다른 사용자의 질문과 답변 링크를 참고해 보시면 도움이 될 것입니다:
이 링크들에서 TypeScript의 실행 및 설정 관련 문제들을 다루고 있으며, 타입 검사와 컴파일 과정에 대한 추가적인 팁을 얻으실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
모든 ts파일이 컴파일 되지 않습니다.(해결됨.)
0
71
4
핸드북 light/dark mode 관련 이슈가 있는 것 같습니다.
0
54
1
제네릭 클래스 핸드북 페이지가 undefined라고 나옵니다.
0
64
2
적절한 타입 찾기 React.ChangeEvent<HTMLInputElemen>
0
56
2
outDir 옵션 추가 후 컴파일 오류 질문
0
158
1
호출 시그니처 질문
0
99
2
서로소 유니언 타입이 discriminated union과 동의어 인가요?
0
115
2
조건부타입소개 중 함수오버로딩 활용 시 인수의타입과 함수의 반환값의 타입이 깨지는 문제
0
91
1
할인쿠폰 관련하여
0
207
2
프론트엔드에서의 인터페이스활용
0
125
2
안녕하세요 이정환님!
0
111
1
Node.js 설치에 관한 질문입니다.
0
107
2
함수 타입 호출 시그니처
0
81
1
35강. 모듈 보강은 라이브러리 파일을 직접 편집해야 하나요?
0
88
2
인터페이스 문법이 있는데 타입 별칭 문법은 왜 있나요?
0
137
4
마우스 호버 시 정보
0
116
2
vite으로 리액트 빌드하기를 업데이트해주세요.
1
104
2
타입가드를 만들어 사용하는 이유가 궁금합니다.
0
112
2
섹션 12가 너무 어려운데... 정상이겠죠..?
0
156
2
선생님.. 알고리즘도 강의해주시면안되나요
0
129
2
선생님은 어떻게 이런걸 아세요?
0
150
1
type: module
0
133
2
7:17초 업캐스팅 질문이있습니다!
0
93
1
슈퍼타입질문
1
95
2





