2

Backbone と Javascript が使用されているプロジェクトに取り組み始めました。Typescript の統合を開始する方法がわかりません。たとえば、ビュー、モデル、オブジェクトなどの前に会社の名前空間があるとします。したがって、バックボーン オブジェクトの作成は、typescript なしでは次のようになります。

Company.Views.MyNewView = (function () { return Backbone.View.extend({ } })();

だから今、Typescriptを使って、次のようなことができると思った

class Company.Views.MyNewView {

}

ただし、Typescript は名前のピリオドが好きではありません。私の最初の質問は、プロジェクト内の既存の名前空間で Typescript を使用するにはどうすればよいかということでした。これらの名前空間は次のように単純に定義されます。

var Company = Company || {};
Company.Views = Company.Views || {};

2 番目の質問は、より一般的なものです。今後、Typescript は、すべてが標準の JavaScript で定義されている既存のプロジェクトと簡単に統合できますか? Typescript 以外のクラス オブジェクトにアクセスする方法がよくわかりません。前もって感謝します。

編集:既存のJavascriptオブジェクトとの統合を試みます

declare module Company.Views {
    export class MyNewRouter extends Company.BaseRouter {
      // It does not recognize Company.BaseRouter
    }
}
4

2 に答える 2

2

Typescript にはモジュールの概念があります。モジュールは実質的に Company || と同等です。{}。

したがって、次のことができます。

module Company{
    export module Views{
        export function MyNewView(){
            return <any>Backbone.View.extend({ });
        }
    }
}

にコンパイルされます:

var Company;
(function (Company) {
    (function (Views) {
        function MyNewView() {
            return Backbone.View.extend({
            });
        }
        Views.MyNewView = MyNewView;
    })(Company.Views || (Company.Views = {}));
    var Views = Company.Views;
})(Company || (Company = {}));

より簡単な例

次のタイプスクリプト:

module Company{
    // You need to do at least one export 
    // for compiler to generate any code
    export var foo = 123;
}

生成:

var Company;
(function (Company) {
    Company.foo = 123;
})(Company || (Company = {}));

既存のJSを統合するため

Js について知るには、typescript の宣言を作成する必要があります。Js は、あるファイルで変数を宣言し、それを別のファイルで使用するかどうかを気にしません。TypeScript は、コンパイル時のチェックを行う必要があるためです。

最も簡単な宣言は次のとおりです。

declare var SomeJSStuff:any; 

そこから築き上げることができます。

于 2013-05-20T01:19:46.583 に答える
0

2番目の部分では、次のようにします。

// Declare your JS stuff
declare module Company {
    export class BaseRouter {
        // Additionally declare any memebers of BaseRouter
        // e.g:
        someProp:number; 
    }
}

// Now use your JS Stuff in typescript 
module Company.Views {
    export class MyNewRouter extends Company.BaseRouter {
      // It recognizes Company.BaseRouter
    }
}
于 2013-05-20T03:45:14.973 に答える