2014-11-20 3 views
0

클라우드 9 ide에서 호스팅하는 내 노드/익스프레스 환경에서 타이프 스크립트를 사용하고 싶습니다. 그 중Typescript 컴파일 오류 : 'bodyofarser'속성이 'typeof e'유형에 없습니다.

내가 뭔가 재산권 'bodyParser은'유형에 존재하지 않는 그 중 몇 가지 오류와 함께 제공 app.ts를 컴파일하는 컴파일러를 얻기 위해 노력하고 문제가 생겼어요 '대해서 typeof 전자는'하나

I 응용 프로그램의 루트 폴더에 여러 개의 정의 파일, 즉 express.d.ts, node.d.ts, body-parser.d.ts가 있어야합니다. 나는 바디 파서 에러가 해결 될 것이라고 생각하면서 필사적으로 body-parser.d.ts를 추가했다.

명령 줄은 다음과 같습니다 TSC --sourcemap --module commonjs는 app.ts 다음과 같이 app.ts의 코드는 다음과 같습니다

// Import express with body parsers (for handling JSON) 
import express = require('express'); 
var bodyParser = require('body-parser'); 

var routes = require('./routes'); 
var user = require('./routes/user'); 
var http = require('http'); 
var path = require('path'); 
var expressValidator = require('express-validator'); 

var app = express(); 

// all environments 
app.set('port', process.env.PORT || 3000); 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
app.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.json()); 
app.use(express.urlencoded()); 
app.use(express.methodOverride()); 
app.use(express.bodyParser()); 
app.use(expressValidator([])); 

// add session support! 
app.use(express.cookieParser()); 
app.use(express.session({ secret: 'sauce' })); 

app.use(app.router); 
app.use(require('stylus').middleware(path.join(__dirname, 'public'))); 
app.use(express.static(path.join(__dirname, 'public'))); 

// Uncommend this line to demo basic auth 
// app.use(express.basicAuth((user, password) => user == "user2" && password == "password")); 


// development only 
if ('development' == app.get('env')) { 
    app.use(express.errorHandler()); 
} 

function restrict(req, res, next) { 
    if (req.session.authenticated) { 
    next(); 
    } else { 
    res.redirect('/'); 
    } 
} 

// Get 
app.get('/', routes.index); 
app.get('/login', routes.login); 
app.get('/register', routes.register); 
app.get('/users', user.list); 
app.get('/AddPlayer', routes.addPlayer); 
app.get('/dashboard', restrict, routes.dashboard); 
app.get('/logout', routes.logout); 

// POST 
app.post('/AddPlayer', routes.AddPlayer); 
app.post('/login', routes.loginUser); 
app.post('/register', routes.registerUser); 

http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 
+0

실제로 TypeScript를 사용한 적이 없으므로 오류를 쉽게 찾을 수는 없지만 중요한 것은 'bodyParser'가 필요하지만'app.use (bodyParser.json());'과'app.use (bodyParser.urlencoded) '대신'app.use (express.bodyParser())'());'. – loganfsmyth

답변

1

당신은 당신의 TS 파일에 모든 종류의 정보를 추가하지 않은 오류 'typeof e'은 typeof express이지만 선언 된 있지만 형식이 없습니다.

이 경우의 표현식은 단순히 식별자 인 변수의 이름입니다.

사용한 유일한 타이프 기능은 import 문입니다 있지만이 경우

나는 VAR로 이동하고 TS 모듈 정의에 대해 잊을 필요되지 않을 수 있습니다. 당신이 (내가 강하게 Nuget 이상 TSD를 추천 해드립니다) 윈도우에있는 경우 단순히

대신 던지는 유형 정의의 루트 폴더에 var express = require('express')TSD 또는 Nuget를 사용해보십시오.

이것은 프로젝트에 어떤 순서를 가져오고 모든 것이 의미가 있습니다. 당신이 명령 줄에서

시작 에 대한 TSD는

npm init 
npm install tsd --save-dev 
#you couldalso install it globally first , with 
# npm install tsd -g 
# once done, initialize it 
tsd init 
#then get the definitions you need 
tsd query node express --action install --save 
tsd will place the definitions under typings\tsd.d.ts for you 

당신이 당신의 스크립트에 입력 한 정보를 추가 할 수

/// <reference path='typings/tsd.d.ts' /> 

지금의 시간을 참조를 추가 할 수 있습니다 매우 쉽게

여전히 작동하지 않지만 적어도 컴파일됩니다.

처음으로 명시 적 정의 파일을 살펴본 결과 많은 도움이되지 않을 것이라고 생각합니다. Express가 최근에 비트를 변경했으며 정의 파일의 정확성을 확신 할 수 없습니다. 그리고 그 위에 익스프레스 꽤 동적입니다, d.ts 어떤의 전체입니다 .. :) 만약 당신이 표현과 타입 정의에서 어떤 실질적인 이득을 얻을지 모르겠지만 당신은 여전히 ​​좋은 기능을 얻을 수 있습니다 Typescript를 사용하고 유형/인터페이스를 빌드하거나 기존 인터페이스를 예상대로 확장하십시오.

2

나는 TSD를 사용해야한다고 생각하지 않는다. 타이핑은 새로운 표준이다. 그리고 당신은 npm을 사용하여 그것을 얻을 수 있습니다.표현식을 통해 익스프레스를 얻으려면 다음 명령을 사용하여 익스프레스에 대한 모든 종속성을 설치하십시오.

typings install express --ambient --save 
typings install serve-static --ambient --save 
typings install express-serve-static-core --ambient --save 
typings install mime --ambient --save 
관련 문제