我最难获得打字稿和余烬一起工作。我在definitely typed获得了所有定义文件,然后我在网站上的Ember指南中浏览了ToDo。我正在尝试将js转换为打字稿,看看设置项目的最佳方式是什么,但我想我不太了解打字稿定义。
如果我这样做:
/// <reference path="typings/ember.d.ts" />
var App = Ember.Application.create();
应用程序是一种“{}”,我无法访问“路由器”来执行指南的下一行
App.Router.map( ... )
我在网上找到的最好的东西是this,它与当前的输入不兼容。
我已经看过打字稿ember-app-kit,但它并没有真正帮助,因为它几乎不包含任何打字稿,而且它们的设置几乎不像ember指南。我只需指向正确的方向。多谢你们。
答案 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项目安装类型定义。