2016-09-06 2 views
0

나는 다음과 같은 명시 적 경로가 :타이프 라이터 + 익스프레스 : req.params

app.get('/:id', function (req, res) { 
    var idNum: number = Number(req.params.id); 
    var idCast: number = +req.params.id; 
    var id: number = req.params.id; 

    console.log('typeof idNum ', typeof idNum , ' ', 'idNum== 0 : ', idNum== 0 , ' ', 'idNum=== 0 : ', idNum=== 0); 
    console.log('typeof idCast', typeof idCast, ' ', 'idCast == 0 :', idCast == 0, ' ', 'idCast === 0 :', idCast === 0); 
    console.log('typeof id ', typeof id , ' ', 'id == 0 : ', id == 0 , ' ', 'id === 0 :' , id === 0); 

    res.json({}); 
}); 

이 반환

typeof idNum number idNum== 0 : true idNum=== 0 : true 
typeof idCast number idCast == 0 : true idCast === 0 : true 
typeof id  string id == 0  : true id === 0  : false 

내가 그 타이프 제공에만 컴파일 타임 유형 검사를 이해하고 내 생각을 req.params가 인수를 문자열로 제공한다는 사실을 모르는 것입니다.

Number에 매개 변수를 자동으로 캐스팅 할 수있는 방법이 있습니까? 또는 적어도 내가 수동으로하지 않은 오류를 제기? 그렇지 않으면, 전체 타이프 스크립트 환경에서 사용되지 않는 한 tympescript는 쓸모없는 것처럼 보인다.

마지막으로, 원본을 읽을 수있는 ExpressJS와 함께 TypeScript를 사용하는 "큰"오픈 소스 프로젝트가 있습니까?

답변

1

req.params is any 그래서 컴파일러는 id의 값이 문자열이라는 것을 알 수있는 방법이 없지만 항상 문자열 인 경로 매개 변수로 제공되므로 문자열입니다.

당신은 router middleware를 사용하여 처리 할 수 ​​있어야한다, 같은 : 숫자로 (문자열있는) 모든 PARAMS라는 ID를 변환해야합니다

router.use(function (req, res, next) { 
    if (req.params && req.params.id && typeof req.params.id === "string") { 
     let num = Number(req.params.id); 
     if (!isNaN(num) { 
      req.params.id = Number(req.params.id); 
     } 
    } 
    next(); 
}); 

.

+0

답 해줘서 고맙지 만 그렇게하는 것이 더러운 것처럼 보입니다./ – IggY

+0

나는 그 일을하는 "자동"방법을 찾을 수 있을지 의심 스럽습니다. 미들웨어 기능은이 경우와 같습니다. –