Node.js + TypeScript:스크립트 컴파일 코드 형식의 구문이 분명하지 않습니다.
노드 프로젝트에서 TypeScript로 작업하려고 하지만 몇 가지 문제가 있습니다.
다음은 내 index.ts 파일입니다.
import express from 'express';
const app = express();
내가 달려갑니다.
tsc --module commonsjs -d index.ts
출력은 index.js:
var express_1 = require('express');
var app = express_1["default"]();
어디서?["default"]어디서 왔습니까?코드가 제대로 실행되지 않도록 하는 것입니다.
var app = express_1["default"]();
^
TypeError: express_1.default is not a function
제가 이해하기로는, "기본" 괄호가 없는 코드를 받았어야 했고 잘 작동했을 것입니다. 괄호를 제거하려고 시도했고 작동했습니다.
내가 여기서 뭘 놓쳤지요?
다음을 추가하여 이 문제를 해결했습니다.tsconfig.json:
{
"compilerOptions": {
...
"module": "commonjs",
"esModuleInterop": true,
...
}
}
에스모듈Interop 플래그는 다음과 같이 설명됩니다. "실행 시간 바벨 에코시스템 호환성을 위한 __importStar 및 __importDefault 도우미 및 enable --allowSyntheticDefaultImports 형식 시스템 호환성을 위한."
https://www.typescriptlang.org/docs/handbook/compiler-options.html
가장 안전한 해결책은 다음과 같습니다.
import express = require('express');
이는 다음과 같습니다.
var express = require('express');
수입 신고에 대한 공식 문서는 여기에서 확인할 수 있습니다.
TypeScript는 여기의 마지막 단락으로 미루어 볼 때, "default"라는 이름의 내보내기가 위의 코드로 작동할 것으로 예상합니다.
참고 사항:TypeScript의 최신 버전(작성 당시 typescript@1.8.0-dev.20151229)은 누락된 기본값을 사용하려고 시도하는 컴파일 시도에 경고를 던질 것으로 보입니다.
index.ts(1,8): error TS1192: Module '"express"' has no default export.
측면 참고 2: Microsoft에서 제공하는 예는 다음과 같습니다.import * as express from 'express';구문은 여기에서 확인할 수 있습니다.다음의 모듈을 대상으로 할 때commonjs(이 예에서와 같이), 이것은 또한 다음과 같이 전파될 것입니다.var express = require('express');.
적어도 TypeScript 2.7이 있고 CommonJS를 목표로 하는 경우 esModule을 사용할 수 있습니다.인터럽트도.
링크에서:
Babel 또는 Webpack과 동일한 런타임 동작을 사용자에게 제공하기 위해 TypeScript는 새로운 --esModule을 제공합니다.레거시 모듈 형식으로 내보낼 때 Interop 플래그가 표시됩니다.
새 --es 모듈 아래Interop 플래그, 이 호출 가능한 공통JS 모듈은 다음과 같이 기본 가져오기로 가져와야 합니다.
import express from "express";
let app = express();
Node.js 사용자는 모듈 대상이 Common인 경우 이 플래그를 활용할 것을 강력히 제안합니다.호출 가능/구성 가능 모듈을 내보내는 Express.js와 같은 라이브러리의 JS.
Express.js와 같은 ES6가 아닌 모듈의 기본 내보내기를 사용하려면 레거시 가져오기 구문을 사용해야 합니다.import express = require('express').
모듈에는 ES6 모듈과 .module.exports Node.js 파일 중 입니다.return모듈의 , 는 AMD의 기본 내보내기, ES6의 기본 내보내기입니다.default키. ES6 기는이유다니입사하용을.import 하는 는 "TypeScript", "TypeScript", "JavaScript"에 권한을 를 생성합니다.default소유물.
이에 대한 자세한 내용은 commonjs / amd 모듈을 가져오기 위한 Newes6 구문(예: 'import foo = required foo')에서 확인할 수 있습니다.
그도사면려하를 ,import키워드를 사용하면 다음과 같습니다.
import express from "express";
// If the above is not supported by your project environment then follow as below
import * as express from "express";
줄기에 .tsconfig.json
{
"compilerOptions": {
...
"module": "commonjs"
...
}
}
조쉬 단도 덕분에.
다음과 같은 방법으로 해결할 수 있습니다.
import * as express from express;
const app = express();
같은 방식으로 작동해야 합니다.
언급URL : https://stackoverflow.com/questions/34520288/node-js-typescript-unclear-syntax-with-type-script-compiled-code
'programing' 카테고리의 다른 글
| R에서 루프 작동 속도 향상 (0) | 2023.06.12 |
|---|---|
| Python에서 개체의 정규화된 클래스 이름 가져오기 (0) | 2023.06.07 |
| TypeScript에서 빈 개체 유형 정의 (0) | 2023.06.07 |
| JPA에서 TINYINT 열 유형 생성 (0) | 2023.06.07 |
| (방콜론) Angular 표기법 (0) | 2023.06.07 |