2013-12-15 5 views
0

서버에 파일을 업로드하는 데 사용하려는 NodeJS formidable 모듈에 대한 Typescript 정의를 작성하려고합니다. 그러나 그것은 오류를 던집니다. typescript 컴파일러는 "import formidable = require ('formidable');"문을 컴파일하지 않습니다. 자바 스크립트에 상응하는. 나는 엄청난 정의가 정확한지 알아야합니다.NodeJS 모듈에 대한 Typescript 정의를 작성하려고합니다.

var fs = require('fs'); 
var path = require('path'); 

var formidable = new formidable.Formidable(); 

타이프 스크립트 컴파일러가를 생성되지 않습니다

여기
import fs = require('fs'); 
import path = require('path'); 
import formidable = require('formidable'); 
var formidable = new formidable.Formidable(); 

는 타이프 스크립트 컴파일러에 의해 생성 된 upload.js있어 : 여기

파일 구문 분석 코드를 포함하는 upload.ts있어 강력한 모듈에 대한 require 문. 이 문제를 해결해야합니다. 여기

는 타이프 라이터 정의 파일입니다 : 여기

/// <reference path="../Main.d.ts" /> 

declare module "formidable" { 
    export interface Formidable { 
     IncomingForm(): Formidable; 
    } 
} 

답변

2

은 무슨 일이야이야 :

당신의 Formidable 모듈은 어떤 값을 포함하지 않기 때문에 (바르 또는 클래스를 포함한 바르, 클래스, 또는 모듈) , "값 공간"에 이름을 만들지 않습니다 (Typescript에는 유형, 값 및 네임 스페이스의 세 가지 다른 네임 스페이스가 있습니다).

import 뭔가를 사용하면 가져온 값의 "모든 의미"를 얻게됩니다. 이 경우 Formidable 모듈에는 값이 없기 때문에 가져 오기에서는 값 공간에 formidable이라는 개체를 만들지 않습니다.

은 그럼 당신은이 작업을 수행 :

import formidable = require('formidable'); 
var formidable = new formidable.Formidable(); 

표현 new formidable.Formidable()를 해결, 컴파일러는 formidable라는 값을 찾습니다. 그것은 방금 생성 한 var을 찾습니다 (가져 오기와 동일한 이름을 가진 vars가 없습니다 - 이것은 JavaScript 코드에서도 작동하지 않습니다 ...). 변수가 자체 이니셜 라이저에 사용되기 때문에 형식 유추는 any에만 있습니다.

var x = new x.y(); // ?? 

다시 근본 문제로 돌아가서는, Formidable에 대한 정의 파일이 어떤 값을 포함해야합니다 :

은 본질적으로 무슨 짓을했는지하는 것은 이것이다. 아마도 다음과 같이 보일 것입니다 (인터페이스 대신 클래스가 있음) :

declare module "formidable" { 
    export class Formidable { 
     IncomingForm(): Formidable; 
    } 
} 
+0

이것은 정말 철저한 대답입니다! – Fenton

+0

감사합니다. Ryan! Thats는 매우 유용한 답변입니다. 그러나 다른 오류로 인해 내 코드가 해결되지 않습니다. 이 질문을 좀 살펴봐 주시겠습니까? http://stackoverflow.com/questions/20603247/unable-to-import-nodejs-module-into-typescript-code – EternallyCurious

관련 문제