我开始从事一个使用 Backbone 和 Javascript 的项目。我不确定如何开始集成 Typescript。例如,我们有一个公司的命名空间,位于我们的 View 、模型、对象等之前。因此,如果没有 typescript ,创建主干对象将如下所示:
Company.Views.MyNewView = (function () { return Backbone.View.extend({ } })();
所以现在,使用 Typescript,我想我可以做类似的事情
class Company.Views.MyNewView {
}
但是,Typescript 不喜欢名称中的句点。所以我的第一个问题是如何将 Typescript 与项目中现有的命名空间一起使用?这些命名空间简单地定义为
var Company = Company || {};
Company.Views = Company.Views || {};
我的第二个问题更为笼统。展望 future ,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({ });
}
}
}
编译成:
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 = {}));
一个更简单的例子
以下 typescript :
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;
你可以build up from there 。
关于javascript - 创建 TypeScript 类以使用现有的 Javascript 和 Backbone 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16641094/