Emberjs和Typescript SetUp

Oak*_*Oak 8 ember.js typescript

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

如果我做:

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

var App = Ember.Application.create();
Run Code Online (Sandbox Code Playgroud)

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

App.Router.map( ... )
Run Code Online (Sandbox Code Playgroud)

我在网上找到的最好的事情就是这个不与当前的打字工作.

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

mus*_*hin 5

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

static create<T extends {}>(arguments?: {}): T;
Run Code Online (Sandbox Code Playgroud)

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

var App = Ember.Application.create<Ember.Application>();
Run Code Online (Sandbox Code Playgroud)

但是,我也看到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;
}
Run Code Online (Sandbox Code Playgroud)

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

/// <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: '/' });
});
Run Code Online (Sandbox Code Playgroud)

这样做之后,它编译并加载没有错误,虽然它实际上没有做任何事情(我认为这对于演练的这个阶段是好的)

  • @Oak-很可能它完全不完整.没有正式的创建拉伸的过程,因此志愿者创建定义文件.我已经为其他几个库做出了贡献,例如为了改进定义文件. (4认同)