2017-08-14 9 views
1

req.userが私のカスタムタイプのIUserになるようにexpress.Requestタイプにユーザープロパティを追加しようとしています。私は、その宣言のマージが進むべき道だっ読みtypescriptですが、今それがタイプとして任意のを定義します、私はreq.userを使用することができますが、私は カスタムインターフェイスとタイプスクリプトのマージによる宣言

declare namespace Express { 
    export interface Request { 
     user?: IUser; 
    } 
} 

custom.d.tsファイルを作成しました。入力ファイル内のIUserをインポートすると、req.userを全く認識していないtypescriptで悪化しただけなので、どちらも役に立ちませんでした。私の入力はIDEによってどのようにIUserと見なされますか?

答えて

1

まず、ExpressRequestを常に大文字にしないでください。特定のルートでのみ要求インターフェイスを変更する必要があります。それはオプションではないので

第二に、

あなたがしなければならない、それはあなたの追加フィールドでExpressRequestを拡張し、それを自分のルートで注釈を付けることが承認されています一度(私は推測)オプションのフィールド?を使用していません。このように:

interface IMyReq extends Request { 
    user: IUser; 
} 

app.post('/api/users-list', (req: IMyReq, res) => { 
// Look ma a request with an authenticated user! 
}); 
+0

期待どおりに動作します!なぜ私はそれを考えなかったのか分かりません! –

関連する問題