programing

Node.js + TypeScript:스크립트 컴파일 코드 형식의 구문이 분명하지 않습니다.

elecom 2023. 6. 7. 22:10
반응형

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

반응형