Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建typescript类以使用现有Javascript和主干对象_Javascript_Backbone.js_Typescript - Fatal编程技术网

创建typescript类以使用现有Javascript和主干对象

创建typescript类以使用现有Javascript和主干对象,javascript,backbone.js,typescript,Javascript,Backbone.js,Typescript,我开始从事一个使用主干网和Javascript的项目。我不确定如何开始集成Typescript。例如,我们公司的名称空间位于视图、模型、对象等之前。因此,在没有typescript的情况下,创建主干对象看起来是这样的: Company.Views.MyNewView = (function () { return Backbone.View.extend({ } })(); 所以现在,使用Typescript,我想我可以 class Company.Views.MyNewView { }

我开始从事一个使用主干网和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 || {};
我的第二个问题更一般。展望未来,Typescript能否轻松地与现有项目集成,其中所有内容都是用标准javascript定义的?我真的不知道如何访问任何非Typescript类对象。提前谢谢

编辑: 尝试与现有Javascript对象集成

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

Typescript具有模块的概念。模块实际上相当于公司| |{}

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

module Company{
    export module Views{
        export function MyNewView(){
            return <any>Backbone.View.extend({ });
        }
    }
}
一个更简单的例子

以下类型脚本:

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; 

你可以

对于第二部分,以下是您将如何做到这一点:

// 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
    }
}

所以听起来至少对于旧的名称空间,我至少需要将它们导出为模块?不需要。如果你想在typescript中使用现有的名称空间,你需要使用声明。对于新名称空间,请使用modules,但如果我有一个名为Company.BaseRouter的现有JS对象,我不能扩展该类型,可以吗?我在我的原始帖子底部添加了我尝试过的片段。添加了第二个答案来回答我看到的thatAh。因此,在不更改当前javascript名称空间的情况下,我必须声明一个新模块,我的typescript可以看到它复制了已经存在的代码。如果我不立即转换所有内容,这会导致以后出现问题吗?
// 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
    }
}