2017-12-26 42 views
0

私は既存のインターフェイスを拡張するためにカスタムタイプ定義を持っています(Requesthereと表示されています)。内容はexpress.d.tsTypescriptのカスタムタイプ定義がインポートクラスで破損する

declare namespace Express { 
    export interface Request { 
    name: string 
    } 
} 

細かく動作します。しかし、文字列であるnameの代わりに、カスタムクラスMyClassにする必要があります。私はインターフェイスの増強を変更

export class MyClass { 
    first: string; 
    last: string; 
} 

::のようなクラス定義が見え

import { MyClass } from "../routes/myClass"; 
declare namespace Express { 
    export interface Request { 
    name: MyClass 
    } 
} 

req.nameにアクセスしたときに今、私は次のエラーを取得する:

error TS2339: Property 'name' does not exist on type 'Request'. 

私が見つけました、私のexpress.d.tsは、追加されたimportステートメントのために効果的に "モジュール"になります。それでも、私の問題をどのように乗り越えることができるかはわかりません。

+0

あなたはトップレベルのインポート/エクスポート文を持っている場合は、ファイルはモジュールのファイルであり、あなたもうグローバル名空間Expressを拡張していない – unional

答えて

1

コメントに記載されているように、ファイルにトップレベルのインポートまたはエクスポートが設定されていると、ファイルのトップレベルのスコープはグローバルスコープとは別のモジュールスコープになります。モジュール内のグローバル宣言を修正する

、あなたがグローバル名前空間にExpressを参照するためにdeclare globalを使用する必要があります。

import { MyClass } from "../routes/myClass"; 
declare global { 
    namespace Express { 
    export interface Request { 
     name: MyClass 
    } 
    } 
} 
関連する問題