Emberjs和Typescript SetUp

时间:2014-01-15 01:21:29

标签: ember.js typescript

我最难获得打字稿和余烬一起工作。我在definitely typed获得了所有定义文件,然后我在网站上的Ember指南中浏览了ToDo。我正在尝试将js转换为打字稿,看看设置项目的最佳方式是什么,但我想我不太了解打字稿定义。

如果我这样做:

/// <reference path="typings/ember.d.ts" />

var App = Ember.Application.create();

应用程序是一种“{}”,我无法访问“路由器”来执行指南的下一行

App.Router.map( ... )

我在网上找到的最好的东西是this,它与当前的输入不兼容。

我已经看过打字稿ember-app-kit,但它并没有真正帮助,因为它几乎不包含任何打字稿,而且它们的设置几乎不像ember指南。我只需指向正确的方向。多谢你们。

2 个答案:

答案 0 :(得分:5)

我不熟悉Ember,但是通过检查ember.d.ts,我可以看到create()被定义为对象的静态泛型函数:

static create<T extends {}>(arguments?: {}): T;

那么你应该能够通过传递一个实际类型来获得更好的类型信息:

var App = Ember.Application.create<Ember.Application>();

但是,我也看到ember typedef在应用程序类中不包含“Router”成员,即使它确实如此,Router类也没有定义map()。我能够通过创建扩展类型定义来实现它:

// ./EmberExt.d.ts
/// <reference path="typedef/ember/ember.d.ts" />

declare class RouterExt extends Ember.Router {
    map: ItemIndexEnumerableCallbackTarget;
}

declare class ApplicationExt extends Ember.Application {
    Router: RouterExt;
}

然后从我的组合路由器/应用程序文件中引用它:

/// <reference path="typedef/ember/ember.d.ts" />
/// <reference path="./EmberExt.d.ts" />

var App = Ember.Application.create<ApplicationExt>();
App.Router.map(function () {
    this.resource('todos', { path: '/' });
});

执行此操作后,它会毫无错误地编译和加载,但它实际上并没有做任何事情(我认为这对于演练的这个阶段是可以的)

答案 1 :(得分:0)

Ember.js的完整且大多数准确的类型定义现在可以从@types/ember@types/ember-data等位置安装,目前全部通过Definitely Typed项目安装。< / p>

Ember CLI集成可通过ember-cli-typescript插件获得。使用TypeScript配置Ember.js项目的简单方法是在Ember.js项目的根目录中运行ember install ember-cli-typescript。这样做会自动生成一个tsconfig.json,它可以正确处理Ember的传统项目布局(适用于应用程序,插件和in-repo插件)。它还将自动为所有核心Ember项目安装类型定义。