Website-Suche

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