16

お互いのメンバーを知る必要がある2つのクラスがあります。

C ++では、前方宣言を使用します。

タイプスクリプトで何をする必要がありますか?

4

3 に答える 3

6

インターフェイスの場合、前方宣言が必要です

declare class F {} 

interface A {
    f:F ;
}

class F implement A {
    f:F ;
    init() { f=this; }
}
于 2013-10-31T01:08:30.940 に答える
5

よくわかりませんが、存在しない問題を解決しようとしていると思います。これはtypescriptで完全に有効です:

class A{
    b=new B();
    func(){
        alert(this.b.member);
    }
}
class B{
    member="hello there";
}
var a=new A();
a.func();

ご覧のとおり、定義する前にクラスBを使用して、クラスA内からそのメンバーにアクセスできます。同じことが関数にも当てはまります。

var a=()=>{
    alert("function a");
    b();
}

var b=()=>{
    alert("function b");
}

a();

これは正常にコンパイルされるはずです。aは、bが実際に定義された後にのみ呼び出すことができることに注意してください。これは機能しません:

var a=()=>{
    alert("function a");
    b();
}
a();

var b=()=>{
    alert("function b");
}

Typescriptで前方宣言は必要ありません。それらがコード用に自動的に生成されることを想像してみてください。

JavascriptとTypescriptを混在させる必要がある場合、問題はより複雑になります。すべてのTypescriptコードはコンパイラーによって静的に型チェックされるため、Javascriptフレームワークのインターフェースはそれほど単純ではありません。

スコープに追加されたすべての変数、関数、および「クラス」は、それらを使用する前に宣言する必要があります。TypescriptプロジェクトにjQueryが必要だとしましょう。すべてのjQueryの魔法はグローバル変数「$」で実行されますが、jQueryスクリプトをhtmlサイトに追加したとしても、Typescriptコードで「$」を参照することはできません。ここで宣言ファイルが使用されます。行を追加することによって

/// <reference path="jquery.d.ts"/>

Typescriptファイルの先頭に、利用可能なすべてのjQueryコードについてコンパイラーに通知します。最も一般的に使用されるJavascriptフレームワークの.d.tsファイルはここにあります:https ://github.com/borisyankov/DefinitelyTyped

最後の2行は、.d.tsファイルの構文の良い例です。

declare var jQuery: JQueryStatic;
declare var $: JQueryStatic;

これで、コンパイラは、「$」と「jQuery」という名前の2つのグローバル変数が使用可能であることを認識します。さらに、VisualStudioを使用している場合、これらの宣言ファイルは素晴らしいインテリセンスサポートを可能にします。

于 2013-01-17T21:22:30.900 に答える
1

私があなたを正しく理解しているなら、試してみてください

declare var a: [class_name]

例:

    module A {
        class B {
            foo() { }
        }
        declare var b: B;
        class C {
            t() {
                b.foo()
            }
        }
    }
于 2013-01-17T20:42:27.853 に答える