我最难让 typescript 和 Ember 一起工作。我将所有定义文件都保存在definitely typed中,并在该站点的Ember指南上浏览了ToDo演练。我正在尝试将js转换为 typescript ,并查看设置项目的最佳方法是什么,但是我想我不太了解 typescript 定义。
如果我做:
/// <reference path="typings/ember.d.ts" />
var App = Ember.Application.create();
应用是“{}”类型,我无法访问“路由器”来完成指南的下一行
App.Router.map( ... )
我在网上发现的最好的东西是this,它不适用于当前的输入。
我已经看过 typescript ember-app-kit,但是它几乎没有帮助,因为它几乎不包含任何 typescript ,而且它们的设置几乎不像ember指南那样。我只需要指出正确的方向。谢谢你们。
最佳答案
我不熟悉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: '/' });
});
完成此操作后,尽管实际上并没有执行任何操作(但我认为在本演练的这一阶段还可以),但它可以毫无错误地进行编译和加载。
关于ember.js - Emberjs和Typescript设置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21127413/