안녕하세요. 제로초님 당신의 강의 매니아 입니다. typescript 모듈 관련 질문이 있어서요.
정말 이부분이 궁금하고, 제가 chatgpt나 구글링 모든 방법을 다 동원해서 찾아 보았는데도, 궁금증 및 해결 방법을 찾을 수 가 없어서 혹시나 하는 마음에 질문을 남기게 되었습니다.
질문은 typescript 모듈 관련 질문 입니다.
react + typescript 개발을 하다가 깜빡하고 export를 빼먹은 적이 있었는데, 정말로 신기하게도 interface를 사용하고자 하는곳에서 import도 없어도 에러가 나지 않고 사용이 가능했습니다.
a.interface에서 타입 선언
b.component.tsx에서 사용
그래서 이부분이 궁금해서 꼭 이해하고 넘어가고 싶어서
ts 기본세팅을 해서 테스트 해보았고
//second.ts
//import meal없음
const lunch: meal = {
menu: "ff",
};
//first.ts
interface meal {
menu: string;
}
//export없음not found meal 에러가 날줄 알았으나, 아무 이상 없이 작동함.
이거 굉장히 흥미롭다 생각해서 이번엔 nest.js에서 실험 해보았습니다.
//src/boards/boards.controller.ts
interface meal {
menu: string;
}
//export없음
//src/boards/boards.service.ts
//import meal없음
const lunch: meal = {
menu: "ff",
};
nest.js에서 tsconfig.ts
{
"compilerOptions": {
"module": "commonjs",
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"target": "ES2021",
"sourceMap": true,
"outDir": "./dist",
"incremental": true,
"strict": true,
"skipLibCheck": true,
"strictNullChecks": true,
"strictBindCallApply": true,
"forceConsistentCasingInFileNames": true,
"noImplicitAny": true,
"noFallthroughCasesInSwitch": true,
"baseUrl": "./",
"esModuleInterop": true, // 추가
"paths": {
"@/*": ["src/*"],
"test/*": ["test/*"]
}
}
}
당연히 또 에러 없이 될줄 알았으나
에러발생: Cannot find name 'meal'.
??? 이거 저만 이해 안가나요.
여러번의 삽질의 끝에 또 한가지 흥미로운 사실을 알게 되었습니다.
nest.js에서는 src 밖에다가
//first.ts
//second.ts
만들어서 위와 똑같이 코드 작성하면 또 에러가 발생하지 않습니다.
정리하면,
우선적으로, 특정 경로 설정을 하지 않으면, 어디서든 사용이 가능한것 같습니다. (nestjs에서 src같은 설정)
react-typescript에서 export없이 interface선언 import 없이 다른파일 export없는 interface 사용가능
ts init로 typescript 프로젝트 처음부터 만들어서 export없이 interface선언 import 없이 다른파일 export없는 interface 사용가능
nest.js에서 export없이 interface선언 import 없이 다른파일 export없는 interface 사용가능, 하지만 src 폴더 밖에서만 가능!
질문은 결론적으로 질문은
어떻게해서 이게 동작 하는건지가 너무 궁금 합니다.
nestjs에서 src처럼 export import없이 사용 불가능하게 하려면 어떻게 해야할지...?
답변 1
0
일단 원래 ts에 export/import가 없으면 글로벌 스크립트가 됩니다. 다른 곳에서 타입 선언을 import 없이 가져올 수 있습니다. (참고로 강의에 있는 내용입니다)
이것도 마찬가지입니다.
src 폴더 바깥에서도 돼야 합니다. 저는 지금 해보니 되네요.
0
근데 3.의 답글에서 src 폴더 바깥에서도 돼야 한다고 하셨는데, src 폴더 바깥에서는 되는데 src안에서는 안되는데 혹시 이건 왜그런건가용?
예를 들어
//src/boards/boards.controller.ts
interface meal {
menu: string;
}
//export없음//src/boards/boards.service.ts
//import meal없음
const lunch: meal = {
menu: "ff",
};에러발생: Cannot find name 'meal'.
에러가 발생 하더라고요.
//cats.controller.ts

//cats.service.ts

귀찮게 해드려 죄송합니다!!! 근데 너무 궁금해서요ㅠㅠ
1
interface가 있는 파일에 import/export가 없어야 합니다. 지금 interface 위 아래로 있잖아요. import/export가 있으면 스크립트가 아니라 모듈 파일이 되어서 명시적으로 import해야만 쓸 수 있습니다.
타입 오버라이딩
0
77
2
React19에서 useRef 타입 정의의 변화
0
118
2
jQuery를 $로 한 번 더 감싼 형태
0
54
1
typescript interface를 jsdoc으로 주석달 때
0
229
2
declare module시 import 위치
0
195
2
declare global 로 선언된 타입을 확장하는게 아닌 좁히는것도 가능할가요?
0
145
2
typescript 강의를 보고 개발을 하다가 강의와 다른 내용인데 물어볼곳이 여기밖에 없어서 질문 드립니다.
0
234
1
강의에 필요한 사전준비와 예제 코드 첨부
1
308
1
local.ts 예제코드 첨부 합니다.
1
227
1
redux 예제코드 가져와서 강의 보면서 따라하는데
1
242
1
react 함수 컴포넌트 타이핑은 있는데 클래스 컴포넌트 타이핑 예제 코드가 없네요.
1
285
1
axios 1.6.0 버전으로 보고 있는데영
4
391
1
Module '"axios"' has no default export 에러 나시는분들
0
879
1
안녕하세요, 제로초님 타입스크립트 axios 분석 강의보고 궁금한점이 있어서 질문드립니다
1
386
1
axios catch 에서 error 타입에 대해 as 없이 이렇게 사용하면 어떨까요?
0
405
1
global 선언 시 export {}
0
296
1
initialState가 제네릭 S인 이유가 잘 이해가 되지 않습니다.
0
308
1
declare module vs declare namespace
0
473
1
declare namespace vs namespace
0
494
2
"axios": "1.4.0" 버전 axios type 코드가 강의와 다릅니다!
0
555
1
Redux type 설정 과정에서 발생한 오류 질문 (ts[2345])
1
376
2
index.d.ts 에서 global declare 선언을 했을 때와 하지 않았을 때의 차이
0
403
1
미들웨어가 커링패턴으로 이루어진 이유
0
435
1
axios 파트 첫번째 강의 질문입니다
0
531
1





