작동하지 않는 이유
import * as MC from './MyClass';
이것은 ES6 / ES2015 스타일 import
구문입니다. 이것의 정확한 의미는 " 로드 된 모듈 네임 스페이스 객체를 가져 ./MyClass
와서 로컬로 사용 MC
"입니다. 특히, "모듈 네임 스페이스 객체 "는 속성이있는 일반 객체로만 구성됩니다. ES6 모듈 객체는 함수로 또는 new
.
다시 말하면 : ES6 모듈 네임 스페이스 객체는 함수로 또는 new
.
모듈에서 import
사용 하는 것은 * as X
속성 만 갖도록 정의됩니다. 하위 CommonJS에서 이것은 완전히 존중되지 않을 수 있지만 TypeScript는 표준에 의해 정의 된 동작이 무엇인지 알려줍니다.
작동하는 것은 무엇입니까?
이 모듈을 사용하려면 CommonJS 스타일 가져 오기 구문을 사용해야합니다.
import MC = require('./MyClass');
두 모듈을 모두 제어하는 경우 export default
대신 사용할 수 있습니다 .
MyClass.ts
export default class MyClass {
constructor() {
}
}
MyConsumer.ts
import MC from './MyClass';
나는 이것에 대해 슬프다; 규칙은 바보입니다.
ES6 가져 오기 구문을 사용하면 좋았을 텐데 이제이 작업을 import MC = require('./MyClass');
해야합니까? 2013 년 이네요! 절름발이! 그러나 슬픔은 프로그래밍의 일반적인 부분입니다. Kübler-Ross 모델 : Acceptance의 5 단계로 이동하십시오.
TypeScript는 이것이 작동하지 않기 때문에 작동하지 않는다고 말합니다. 해킹이 있습니다 ( namespace
선언을 추가하는 것이이 MyClass
작업을 가장하는 인기있는 방법입니다). 오늘은 특정 하향 레벨링 모듈 번 들러 (예 : 롤업)에서 작동 할 수 있지만 이것은 환상적입니다. 아직 ES6 모듈 구현은 없지만 영원히 사실은 아닙니다.
neato 네이티브 ES6 모듈 구현에서 실행 하려고 시도하고 ES6 구문을 사용하여 ES6가 명시 적으로 수행하지 않는 작업 을 시도 함으로써 중대한 실패에 대비 한 자신을 발견하는 미래의 모습을 상상해보십시오 .
비표준 모듈 로더를 활용하고 싶습니다.
아마도 default
존재하지 않을 때 "유용하게" 내보내기를 생성하는 모듈 로더가 있을 수 있습니다. 사람들은 이유가있어 표준을 만들지 만 표준을 무시하는 것은 때때로 재미 있고 우리는 그것이 멋진 일이라고 생각할 수 있습니다.
MyConsumer.ts 를 다음으로 변경 하십시오 .
import A from './a';
그리고 allowSyntheticDefaultImports
명령 줄 또는 tsconfig.json
옵션을 지정합니다 .
참고 allowSyntheticDefaultImports
전혀 코드의 런타임 동작을 변경하지 않습니다. 모듈 로더가 default
존재하지 않을 때 내보내기를 생성한다는 것을 TypeScript에 알려주는 플래그 일뿐입니다 . 이전에하지 않았던 nodejs에서 코드가 마술처럼 작동하도록 만들지는 않습니다.
javascript
기본 태그 로 제거 하고 떠나는 것이 좋습니다 . 문제는 잘못했다고 가정 의 (a TS 기능)와 결합 할 수 있지만, 이와 결합되어야한다 . 기본적으로 ES6 모듈 가져 오기 / 내보내기 대 CJS / AMD입니다.ecmascript-6
typescript
export =
import ... from
import =