ember.js - Configurarea Emberjs și Typescript
Am cele mai mari dificultăți să fac TypeScript și Ember să funcționeze împreună. Am luat toate fișierele de definiție din DefinitelyTyped și am parcurs tutorialele ToDo din ghidul Ember de pe site. Încerc să convertesc JS-ul în TypeScript și să văd care este cea mai bună modalitate de a configura proiectul, dar cred că nu înțeleg prea bine definițiile TypeScript.
Dacă fac:
/// <reference path="typings/ember.d.ts" />
var App = Ember.Application.create();
Aplicația este un tip de '{}' și nu pot accesa 'Routere' pentru a face următorul pas din ghid
App.Router.map( ... )
Cea mai bună lucru pe care l-am găsit online a fost acesta, care nu funcționează cu tastarea actuală.
Am văzut ember-app-kit în TypeScript, dar nu ajută prea mult deoarece include abia TypeScript și configurarea lor este abia asemănătoare cu ghidurile Ember. Am nevoie doar să fiu îndreptat în direcția corectă. Mulțumesc, băieți.
Răspuns #1
Nu sunt familiarizat cu Ember, dar din inspectarea fișierului ember.d.ts, pot vedea că create() este definită ca o funcție generică statică pe obiect:
static create<T extends {}>(arguments?: {}): T;
Deci atunci ar trebui să poți obține informații mai bune despre tip trecând un tip real:
var App = Ember.Application.create<Ember.Application>();
Totuși, văd de asemenea că typedef-ul ember nu include un membru „Router” în clasa aplicație, și chiar dacă ar include, clasa Router nu definește map(). Am reușit să-l fac să funcționeze creând o definiție de tip extinsă:
// ./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;
}
Și apoi referindu-mă la asta din fișierul meu combinat de router/aplicație:
/// <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: '/' });
});
După ce faci asta, se compilează și se încarcă fără eroare, deși de fapt nu face nimic (ceea ce cred că este în regulă pentru această fază a ghidului)
Răspunsul #2
Definiții complete și în mare parte corecte ale tipurilor pentru Ember.js sunt acum disponibile pentru instalare de pe npm la @types/ember, @types/ember-data și așa mai departe, toate în prezent prin proiectul Definitely Typed.
Integrarea Ember CLI este disponibilă prin addon-ul ember-cli-typescript. Cea mai simplă modalitate de a configura un proiect Ember.js cu TypeScript este să rulezi ember install ember-cli-typescript în rădăcina proiectului tău Ember.js. Procedând astfel se va genera automat un fișier tsconfig.json care gestionează corect structura convențională a proiectului Ember (pentru aplicații, addon-uri și addon-uri în depozit). De asemenea, va instala automat definițiile de tip pentru toate proiectele de bază Ember.
