Wo werden TypeScript-Schnittstellen normalerweise in einer Anwendung gespeichert?
Ich habe eine Anwendung, die ich so programmiert habe:
// File util.ts
class Util {
// ....
// ...
}
export = Util;
// File base.ts
import Util = require('../../Utils/util');
class AdminBase extends Util {
....
isSelectedValue (data: IElement) {
var title = data.text;
var valueString = data.val.toString();
it('Check for ' + data.text, function () {
expect(element(by.id(data.id)).getAttribute("value")).toBe(valueString);
});
}
....
ExamStatusId = {
All: <IEnumElement>{
id: this.examStatusSelectId,
text: 'Exam Status: All',
val: 0
},
Current: <IEnumElement>{
id: this.examStatusSelectId,
text: 'Exam Status: Current',
val: 1
}
}
....
export = AdminBase;
// File page.ts
class ExamPage extends AdminBase {
...
...
}
export = ExamPage;
// File test.ts
import ExamPage = require('./page');
var page = new ExamPage();
describe('Admin Exam Page test', function () {
page.isSelectedValue(page.ExamStatusId.All);
});
Hier ist die Schnittstelle, die ich habe:
interface IEnumElement {
elem: string;
text: string;
val: number
}
Kann mir jemand in einer TypeScript-Anwendung wie dieser sagen, wo ich die Interface-Datei ablegen sollte? Werden Interfaces zusammen mit Definitionen gespeichert, und wenn ja, wie könnte meine Anwendung dann auf sie verweisen?
Antwort #1
Die Typescript-Schnittstellen können überall platziert werden, wie Sie möchten. Jeder Ort, von dem aus diese Definitionen verfügbar sind, ist in Ordnung.
Aber dies sind wirklich nur Typescript-Dinge... weil sie ein Designzeit-Feature sind. Sie werden nicht in irgendeinen JavaScript-Code umgewandelt/kompiliert.
Also, wenn es sinnvoll ist, speichern Sie sie in einer separaten Datei oder direkt in derselben, in der die Implementierung ist. Es gibt keine "muss"-Regel...
Das heißt, lege sie in eine Datei und beobachte, was nach der Kompilierung passiert... diese js-Datei wird (fast) leer sein
Antwort #2
Da Sie externe Module verwenden, empfehle ich, eine globals.ts-Datei zu erstellen, die auf obere Ebene keine export-Anweisung enthält und alle Ihre interface-Deklarationen enthält, sodass Sie nicht jedes Mal ein import durchführen müssen, nur um an die Schnittstelleninformationen zu gelangen.
Sie würden auf diese globals.ts-Datei mit einem standardmäßigen reference-Tag verweisen, d.h.
/// <reference path="../globals.ts"/>
Übrigens, grunt-ts (https://github.com/grunt-ts/grunt-ts) kann dieses Referenz-Tag für Sie erzeugen, wenn Sie den folgenden Code in Ihrer TypeScript-Datei haben:
///ts:ref=globals
