2014-01-15 7 views
7

Ich habe die schwerste Zeit, Typoskript und Ember zusammen zu arbeiten. Ich habe alle Definitionsdateien in definitely typed und ich ging durch die ToDo-Walk Throughs auf Ember Guide auf der Website. Ich versuche, die js in typescript zu konvertieren und zu sehen, was der beste Weg zur Einrichtung des Projekts war, aber ich denke, ich verstehe die Typoskript-Definition nicht sehr gut.Emberjs und Typescript SetUp

Wenn ich tun:

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

var App = Ember.Application.create(); 

App ist eine Art von ‚{}‘ und ich kann nicht ‚Router‘ Zugriff auf die nächste Zeile des Führungs

App.Router.map(...) 

das Beste zu tun Sache, die ich online fand, war this, die nicht mit der aktuellen Typisierung funktioniert.

Ich habe das Typescript ember-app-kit gesehen, aber es hilft nicht wirklich, da es kaum ein Typoskript enthält und seine Einrichtung kaum wie die ember guides ist. Ich muss nur in die richtige Richtung zeigen. Danke Leute.

Antwort

5

Ich bin nicht vertraut mit Ember, aber ember.d.ts von der Überprüfung, kann ich sehen, dass create() als eine statische generische Funktion auf Objekt definiert ist:

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

Also dann sollten Sie sein bessere Art Informationen erhalten, kann einen tatsächlichen Typen, indem:

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

Allerdings sehe ich auch, dass die Glut typedef nicht ein „Router“ Mitglied in der Anwendungsklasse enthält, und selbst wenn es so wäre, der Router Die Klasse definiert map() nicht. Ich war in der Lage, es zu erhalten, indem eine erweiterte Typdefinition zu arbeiten:

// ./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; 
} 

Und dann verweisen, dass von meiner kombinierten Router/Anwendungsdatei:

/// <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: '/' }); 
}); 

Nachdem Sie das getan, es kompiliert und Lasten ohne Fehler, obwohl es eigentlich nichts tut (was ich glaube, ist in Ordnung für diese Phase der Walkthrough)

+0

danke für die Antwort. Ich verstehe, dass wir diese Typoskriptklassen erweitern können und es nicht zum Scheitern bringen, aber ich verstehe nicht, warum es in der Definitionsdatei nicht an erster Stelle stand. Soll der ts-Code eine andere Struktur annehmen? – Oak

+4

@ Oak - Es ist sehr wahrscheinlich, dass es einfach unvollständig ist. Es gibt keinen formellen Prozess zum Erstellen von Zugkräften, daher erstellen Freiwillige die Definitionsdatei. Ich habe zu mehreren anderen Bibliotheken beigetragen, um zum Beispiel die Definitionsdateien zu verbessern. – WiredPrairie