2

我开始从事一个使用 Backbone 和 Javascript 的项目。我不确定如何开始集成 Typescript。例如,我们在视图、模型、对象等之前有我们公司的命名空间。因此,在没有打字稿的情况下创建主干对象将如下所示:

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

所以现在,使用 Typescript,我想我可以做类似的事情

class Company.Views.MyNewView {

}

但是,Typescript 不喜欢名称中的句点。所以我的第一个问题是如何在我的项目中使用带有现有命名空间的 Typescript?这些命名空间被简单地定义为

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

我的第二个问题更笼统。展望未来,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 有模块的概念。一个模块实际上等同于公司 || {}。

因此,您可以执行以下操作:

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

您需要为 typescript 创建声明以了解您的 Js。Js 不在乎您是否在一个文件中声明变量并在另一个文件中使用它。TypeScript 这样做是因为它需要进行编译时检查。

最简单的声明是:

declare var SomeJSStuff:any; 

你可以从那里建立起来

于 2013-05-20T01:19:46.583 回答
0

对于第二部分,您将如何执行以下操作:

// 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 回答