2017-02-21 18 views
0

同じ名前空間を持つ2つのファイルを作成し、Typescriptで別のファイルにインポートする方法を理解する上で問題があります。マージされた中Typescriptの2つの異なるファイルで同じ名前空間を正しくインポートする方法

1)個別の宣言:私はこれらのエラーを持っている

file1.ts

export namespace nspace { 
    export class ClassA { 

    } 
} 

file2.ts FILE2内部

import {nspace} from './file1'; 

export namespace nspace { 
    export class ClassB extends nspace.ClassA { 
     private z: nspace.ClassA; 
    } 
} 

この

は、状況です宣言 'nspace'はすべてエクスポートするか、すべてローカルにする必要があります

2「typeof演算nspace」その上で

タイプ上に存在しないプロパティ「にClassAは」にClassAは正しくzフィールドの型を宣言するために使用された場合(それも正しいファイルに私をもたらし発見されました)私のIDEで "宣言に行く"を使用する場合)
私は本当にそれが何を意味するのか分かっていないので、私は助けが見つかったページのどれも理解していないので、インターネット上で最初のエラーを検索しようとしました。私は宣言が活字体でマージについてのドキュメントを読むが、私は、これは任意の助けである場合、私は知らない
を採掘するために似たような状況を見つけることができませんでしたが、私は自分のアプリケーションに

答えて

0

、働いていたのインポート時に別の名前を与える:

file1の

export namespace nspace { 
    export class ClassA { 

    } 
} 

FILE2

import * as a from './file1'; 

export namespace nspace { 
    export class ClassB extends a.nspace.ClassA { 
     private b: a.nspace.ClassA; 

    } 
} 
0

をSystemJSを使用していますそれは非常にする必要がありますシンプルな使用する:

ClassA.ts
namespace MyApp { 
    export class ClassA { 
     public a: string = "classA"; 
    } 
} 
ClassB.ts
namespace MyApp { 
    export class ClassB extends ClassA { 
     private class_a: ClassA = new ClassA(); 
     private b: string = "classB"; 
    } 
} 
main.ts
namespace MyApp { 
    var b = new ClassB(); 
    console.log(b.class_a.a) // "classA" 
} 

コンパイラはあなたが同じ名前空間内で作業していることを認識しますので、importの必要はありません。

次のようなClassB.tsファイルの先頭に参照を追加する必要があります: /// <reference path="ClassA.ts" />

私のセットアップでは、私はこれを行うにはありませんでしたが、コンパイラは物事を拾うように見えます正確に自動的に。 (私はシングルOUTFILEとtsconfig.jsonで除外するディレクティブを使用)

追記:

私はこの中に奇妙な見つけることはあなたはそれが私のClassB.tsで発見されるのをClassAをエクスポートすることを余儀なくされていることです。 Main.ts(私的変数でさえ)でそれらを使用したい場合、ClassAとClassBを名前空間に非公開にすることは不可能です。それは単に "名前を見つけることができません"というエラーです「どうやら

+0

限り私はSystemJSを使用している場合、これは一般的に行われている見てきたように、あなたが必要あなたのファイルに必要なものすべてをインポートするか、それとも間違って使っていますか?これはいつも私のためにこのように働いていました – valepu

+1

実際にSystemJSをよく知っていますが、 ig.json'が正しく設定されていれば( '' module ":" system "'を使って)、結果のjavascriptファイルは正しいSystemJS import文を持っているはずです。 typescript形式であなたのtypescriptを作成し、コンパイラが環境を扱えるようにしてください。それを試して、あなたのためにコンパイルされたタイスクリプトを見てみましょう! –

+0

my tsconfig.jsonには「module:system」がありますが、特定のファイルで使用するすべてのものをインポートしないと、ブラウザでアプリケーションを開くと失敗します。それは、どのように鞭がコンパイルを処理するのだろうか? (index.tsから始まり、インポートをナビゲートします)。私はこれを開始プロジェクトとして使用しています:https://github.com/FountainJS/generator-fountain-angular1 – valepu

関連する問題